地址:https://vijos.org/p/1040
描述
高精度乘法
输入:两行,每行表示一个非负整数(不超过10000位)
输出:两数的乘积。
样例1
样例输入
99
101
样例输出
9999
限制
各个测试点1s
<pre name="code" class="cpp">思路:
乘法原理
程序:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
char st1[10005],st2[10005];
int a[10005],b[10005],c[20005];
int i,j,len1,len2;
cin >> st1 >> st2;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
len1=strlen(st1);
j=1;
for (i=len1-1;i>=0;i--)
{
a[j++]=st1[i]-'0';
}
len2=strlen(st2);
j=1;
for (i=len2-1;i>=0;i--)
{
b[j++]=st2[i]-'0';
}
for (i=1;i<=len1;i++)
for (j=1;j<=len2;j++)
c[i+j-1]+=a[i]*b[j];
for (i=1;i<len1+len2;i++)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
while (!c[i] && i>1) i--;
while (i)
printf("%d",c[i--]);
printf("\n");
return 0;
}