C/C++ 大整數乘法
阿新 • • 發佈:2019-02-12
題目描述
求兩個不超過200位的非負整數的積。
輸入
有兩行,每行是一個不超過200位的非負整數,沒有多餘的前導0。
輸出
一行,即相乘後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。
樣例輸入
12345678900 98765432100
樣例輸出
1219326311126352690000
#include<stdio.h> #include<string.h> #define N 200 void compute(char *a,char *b,char *c) { int i,j,m,n; long sum,t=0; m=strlen(a)-1; n=strlen(b)-1; for(i=m;i>=0;i--) a[i]-='0'; for(i=n;i>=0;i--) b[i]-='0'; for(i=m+n;i>=0;i--) { sum=t; if((j=(i-m))<0) j=0; for(;j<=i&&j<=n;j++) sum+=(a[i-j]*b[j]); c[i+1]=sum%10+'0'; t=sum/10; } c[m+n+2]='\0'; if(t>0) { c[0]=t+'0'; printf("%s",c); } else { printf("%s",c+1); } printf("\n"); } int main() { char a[N],b[N],c[N*2]; while(scanf("%s",a)!=EOF) { scanf("%s",b); compute(a,b,c); } return 0; }