高精度乘法
题目描述
牢门上的第三道锁,需要使用高精度乘法来破译出相应密码,当然,必须使用“万进制算法”计算两个非负整数A、B的积,其中A和B的位数在10000位以内。
输入
共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A、B的位数均在10000以内。
输出
输出一个数,即A和B的乘积。
样例输入
2
3
样例输出
6
解析:
- 首先,输入字符,并转成整型数组;
- 其次,做乘法(和高精加与减不同,这次要进行la*lb次运算,当然进位什么的差不多);
- 最后,输出;
高精加与减:见前文。
附上代码:
#include<bits/stdc++.h>
using namespace std;
char sa[10001],sb[10001];
int main()
{
int a[10001]={0},b[10001]={0},c[10001]={0},la,lb,d=0,s,t,i,j,k;
cin>>sa>>sb;
la=strlen(sa);
lb=strlen(sb);
for(i=0;i<la;i++)
a[la-i]=sa[i]-'0';
for(i=0;i<lb;i++)
b[lb-i]=sb[i]-'0';
for (i=1;i<=la;i++)
{
int x=0;
for(j=1;j<=lb;j++)
{
c[i+j-1]+=a[i]*b[j]+x;
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+lb]=x;
}
int lc=la+lb;
while(c[lc]==0&&lc>1)
lc--;
for(i=lc;i>=1;i--)
cout<<c[i];
return 0;
}