描述
求两个不超过200位的非负整数的积。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
12345678900
98765432100
样例输出
1219326311126352690000
#include <iostream>
#include <string.h>
using namespace std;
char s1[300], s2[300];
int a[300],b[300],c[600];
int main()
{
int len1,len2,len;
cin>>s1>>s2;
len1 = strlen(s1);
len2 = strlen(s2);
for(int i=0;i<len1;i++)
{
a[i] = s1[len1-i-1]-'0';
}
for(int i=0;i<len2;i++)
{
b[i] = s2[len2-i-1]-'0';
}
len = len1+len2;//乘积的位数不超过两个乘数长度的和
for(int i=0;i<len1;i++)
{
for(int j=0;j<len2;j++)
{
c[i+j] += a[i]*b[j];
if(c[i+j]>=10)
{
c[i+j+1] += c[i+j]/10;
c[i+j] = c[i+j]%10;
}
}
}
while(len && c[len]==0)
{
len--;
}
while(len>=0)
{
cout<<c[len];
len--;
}
return 0;
}
版权声明:本文为yansuifeng1126原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。