描述
求两个不超过200位的非负整数的积。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
12345678900
98765432100
样例输出
1219326311126352690000
提示
30%的数据,输入的两个整数不超过8位。
代码
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=200+10;
int a[N],b[N],c[N<<1];
char s[N],ss[N];
int main()
{
cin>>s>>ss;
int len1=strlen(s);
int len2=strlen(ss);
for(int i=0;i<len1;i++)
{
a[len1-i]=s[i]-'0';
}
for(int i=0;i<len2;i++)
{
b[len2-i]=ss[i]-'0';
}
int p=0,tot;
int t=0;
for(int i=1;i<=len2;i++)
{
p=0;
for(int j=1;j<=len1;j++)
{
t=j+i;
tot=a[j]*b[i]+p+c[t-1]; //模拟理解一下吧
p=tot/10;
c[t-1]=tot%10;
}
while(p)
{
c[t++]=p%10;
p/=10;
}
}
while(c[t]==0)
{
t--;
}
for(int i=t;i>=1;i--)
cout<<c[i];
return 0;
}