预处理
int Max_len; // 最多可能的位数
string a, b;
void init() {
cin >> a >> b;
Max_len = 500; //
int ind = Max_len, i = a.size() - 1;
while(i >= 0) {
ans[ind] = a[i] - '0';
ind--; i--;
}
ind = Max_len, i = b.size() - 1;
while(i >= 0) {
tem[ind] = b[i] - '0';
ind--; i--;
}
return;
}
高精度加法
void add(int a[], int b[]) {
int jw = 0;
for(int i = Max_len; i >= 0; i--) {
a[i] += jw + b[i];
jw = a[i] / 10;
a[i] %= 10;
}
return;
}
int main() {
// init()
add(ans, tem);
bool f = 0;
for(int i = 0; i <= Max_len; i++) {
if(!f && (ans[i] || i == Max_len)) f = 1;
if(f)
printf("%d", ans[i]);
}puts("");
}
高精度减法
void sub(int a[], int b[]) { //
int jw = 0;
for(int i = Max_len; i >= 0; i--) {
a[i] = a[i] + jw - b[i];
if(a[i] < 0) {
a[i] += 10;
jw = -1;
}
else jw = 0;
}
return;
}
int main() {
sub();
bool f = 0;
for(int i = 0; i <= Max_len; i++) {
if(!f) {
if(i == Max_len) {
f = 1;
}
else if(ans[i]) {
f = 1;
if(fh) printf("-"); // fh : a < b 的 flag
}
}
if(f)
printf("%d", ans[i]);
}puts("");
}
高精度乘法
// 高精 * 高精
void mul1(int a[], int b[], int c[]) { // c = a * b
for(int i = Max_len; i >= 0; i--) { /// b[i] * 10^(Max_len - i)
int jw = 0;
int tem[N] = {};
for(int j = Max_len; j >= (Max_len - i); j--) { // a[j]
tem[j - (Max_len - i)] = b[i] * a[j] + jw;
jw = tem[j - (Max_len - i)] / 10;
tem[j - (Max_len - i)] %= 10;
}
add(c, tem);
}
}
标签:自存,tem,int,Max,jw,len,--,加法,减法
From: https://www.cnblogs.com/re0acm/p/17325005.html