1.大数乘法
void multify(const char* a,const char* b){
assert(a != NULL&&b != NULL);
int lena = strlen(a);
int lenb = strlen(b);
vector<int> sum(lena + lenb,0);
for (int i = 0; i < lena; i++){
for (int j = 0; j < lenb; j++){
sum[i + j + 1] += (a[i] - '0') * (b[j] - '0');
}
}
for (int i = lena + lenb - 1; i >= 0; i--){
if (sum[i] >= 10){
sum[i - 1] += sum[i] / 10;
sum[i] %= 10;
}
}
int i = 0;
while (sum[i] == 0) i++;
for (; i < lena + lenb; i++){
cout << sum[i];
}
cout << endl;
}
2.大数加法
void add(const char* a,const char* b){
assert(a != NULL&&b != NULL);
int lena = strlen(a);
int lenb = strlen(b);
vector<int> sum(max(lena,lenb)+1,0);
int i = lena-1,j = lenb-1;
int k = 0;
for (; i >=0 && j >=0; i--,j--){
sum[k]=(a[i] - '0') + (b[j] - '0');
k++;
}
while (i >=0){
sum[k]=a[i] - '0';
i--;
k++;
}
while (j >=0){
sum[k]= b[j] - '0';
j--;
k++;
}
int len = sum.size()-1;
if (sum[len] == 0) len--;
for (i = 0; i <= len; i++){
if (sum[i]>=10){
sum[i + 1] += sum[i] / 10;
sum[i] %= 10;
}
}
if (sum[len+1] > 0) len++;
for (i = len; i >= 0; i--)
cout << sum[i];
cout << endl;
}
比如杭电 1002 A + B Problem II
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
char a[1002];
char b[1002];
int main(){
int T;
//freopen("test.txt","r",stdin);
scanf("%d",&T);
for (int t = 1; t <= T;t++){
scanf("%s %s",&a,&b);
int lena = strlen(a);
int lenb = strlen(b);
vector<int> sum(max(lena,lenb) + 1,0);
int i = lena - 1,j = lenb - 1;
int k = 0;
for (; i >= 0 && j >= 0; i--,j--){
sum[k] = (a[i] - '0') + (b[j] - '0');
k++;
}
while (i >= 0){
sum[k] = a[i] - '0';
i--;
k++;
}
while (j >= 0){
sum[k] = b[j] - '0';
j--;
k++;
}
int len = sum.size() - 1;
if (sum[len] == 0) len--;
for (i = 0; i <= len; i++){
if (sum[i] >= 10){
sum[i + 1] += sum[i] / 10;
sum[i] %= 10;
}
}
if (sum[len + 1] > 0) len++;
cout << "Case " << t << ":" << endl;
printf("%s + %s = ",a,b);
for (i = len; i >= 0; i--)
cout << sum[i];
cout << endl;
if (t != T)
cout << endl;
}
return 0;
}