6:大整数乘法
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
求两个不超过200位的非负整数的积。
输入
- 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 输出
- 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入
-
12345678900 98765432100
样例输出
-
1219326311126352690000
提示
- 30%的数据,输入的两个整数不超过8位。
-
-
#include<iostream> #include<cmath> #include<cstring> #include<algorithm> #include<iomanip> #include<queue> #include<stack> #include<vector> #include<set> #include<map> using namespace std; string s1,s2; int a[205]={0}; int b[205]={0}; int c[40005]={0}; int main() { cin>>s1>>s2; a[0]=s1.length(); b[0]=s2.length(); for(int i=1;i<=a[0];++i) { a[i]=s1[a[0]-i]-'0'; } for(int i=1;i<=b[0];++i) { b[i]=s2[b[0]-i]-'0'; } c[0]=a[0]+b[0]-1; for(int i=1;i<=a[0];++i) { for(int j=1;j<=b[0];++j) { c[i+j-1]+=a[i]*b[j]; } } for(int i=1;i<=c[0];++i) { if(c[i]>=10) { c[i+1]+=c[i]/10; c[i]=c[i]%10; } } if(c[c[0]+1]>0)c[0]++; while(c[c[0]]>=10) { c[c[0]+1]+=c[c[0]]/10; c[c[0]]=c[c[0]]%10; c[0]++; } for(int i=c[0];i>=1;--i) { cout<<c[i]; } cout<<endl; return 0; }