大整数乘法
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
求两个不超过200位的非负整数的积。
输入
- 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 输出
- 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入
-
12345678900 98765432100
样例输出
-
1219326311126352690000
-
#include<stdio.h> #include<string.h> void reverse(char a[]) { int len=strlen(a); int i,j; char ch; for(i=0,j=len-1;i<j;j--,i++){ ch=a[i]; a[i]=a[j]; a[j]=ch; } } int main(){ char a[201],b[201]; int c[401]; int i,j,k; scanf("%s%s",a,b); for(i=0;i<401;i++){ c[i]=0; } reverse(a); reverse(b); for(i=0;i<strlen(a);i++){ for(j=0;j<strlen(b);j++){ c[i+j]+=(a[i]-'0')*(b[j]-'0'); } } for(i=0;i<strlen(a)+strlen(b);i++){ if(c[i]>=0){ c[i+1]+=c[i]/10; c[i]%=10; } } for(k=i;k>0;k--){ if(c[k]==0){ continue; } else{ break; } } for(;k>=0;k--){ printf("%d",c[k]); } printf("\n"); return 0; }