描述
求兩個不超過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;
}