A24197. 大整数乘法
填空题
困难
知识点
题目描述
大整数乘法
题目描述
求两个不超过200位的非负整数的积。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
输入样例
12345678900
98765432100输出样例
1219326311126352690000参考答案
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
char str1[220],str2[220];
gets(str1);
gets(str2);
int a[220],b[220],c[40000];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int len1,len2;
len1=strlen(str1);
len2=strlen(str2);
int i,j;
for(i=0; i<len1; i++)
a[len1-i]=str1[i]-'0';
for(i=0; i<len2; i++)
b[len2-i]=str2[i]-'0';
int t,r,m;
for(i=1; i<=len2; i++)
{
t=0; //进位数。
for(j=1; j<=len1; j++)
{
m=i+j;
r=a[j]*b[i]+t+c[m-1]; //让乘数的每个位上的数都与被乘数相乘,乘数的每个位上的数与被乘数相乘后的结果都与个上一位上的数与被乘数相乘后的结果相加。
t=r/10;
c[m-1]=r%10; //结果,每位都小于10.
}
while(t)
{
c[m++]=t%10;
t=t/10;
}
}
while(c[m--]==0);
for(i=m+1;i>=1;i--)
cout<<c[i];
cout<<endl;
return 0;
}答案解析
竖式运算:就是按照竖式运算的步骤来计算。
上一题
下一题