题目描述】
求两个不超过200位的非负整数的积。
【输入】
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
【输出】
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
12345678900 98765432100
【输出样例】
1219326311126352690000
看我以前发布的高精度算法集合
#include <iostream>
using namespace std;
const int maxn = 400 + 11;
char a[maxn],b[maxn];
int c[maxn],d[maxn],e[maxn];
int main(int argc, char const *argv[]){
cin >> a >> b;
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
memset(e,0,sizeof(e));
c[0] = strlen(a);
d[0] = strlen(b);
for(int i = 1; i <= c[0]; i++) c[i] = a[c[0]-i] - '0';
for(int i = 1; i <= d[0]; i++) d[i] = b[d[0]-i]-'0';
for(int i = 1; i <= c[0]; i++){
for(int j = 1; j <= d[0]; j++){
e[i+j-1] += c[i]*d[j];
if(e[i+j-1] > 9){
e[i+j] += e[i+j-1]/10;
e[i+j-1] %= 10;
}
}
}
//取出后置0
int k = maxn-1;
while(e[k] == 0) k--;
for(int i = k; i >= 1; i--) cout << e[i];
cout << endl;
return 0;
}