高精度乘法
题目描述
请你用高精度算法求两个非负数的积,这两个数的最长位数为400位。
输入
有多组测试数据,每组数据占一行,分别为两个非负整数a和b,中间仅有一个空格隔开,输入以EOF结束。
输出
对应每行输入,输出对应的积。
样例输入
10000000000 10 1 100000000000000 99 99 123456789 987654321
样例输出
100000000000 100000000000000 9801 121932631112635269
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { char a1[500],b1[500]; int a[500],b[500],c[1000],la,lb,lc,x,i,j; while ((scanf("%s",a1))!=EOF) { scanf("%s",b1); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); la=strlen(a1); lb=strlen(b1); for(i=0;i<la;i++) a[la-i]=a1[i]-48; for(i=0;i<lb;i++) b[lb-i]=b1[i]-48; for(i=1;i<=la;i++) { x=0; for(j=1;j<=lb;j++) { c[i+j-1]=a[i]*b[j]+x+c[i+j-1]; x=c[i+j-1]/10; c[i+j-1]%=10; } c[i+lb]=x; } lc=la+lb; while(c[lc]==0&&lc>1)lc--; for(i=lc;i>=1;i--) cout<<c[i]; cout<<endl; } } |
Subscribe