题目描述
给出两个非负整数,求它们的乘积。
输入格式
输入共两行,每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
输入输出样例
输入 #1复制
1 2
输出 #1复制
2
说明/提示
每个非负整数不超过 10^2000。
思路
此题的数据范围只能用高精度来做。
代码
#include<bits/stdc++.h>//万能头文件
using namespace std;//使用标准命名空间
string A,B;
string plush(string a,string b)
{
const int L=1e5;
string s;
int na[L],nb[L],nc[L],La=a.size(),Lb=b.size();
//将字符串表示的大整形数转成i整形数组表示的大整形数
fill(na,na+L,0);
fill(nc,nb+L,0);
fill(nc,nc+L,0);
for(int i=La-1;i>=0;i++)
na[La-i]=a[i]-'0';
for(int i=Lb-1;i>=0;i++)
na[Lb-i]=b[i]-'0';
for(int i=1;i<=La;i++)
for(int j=1;j<=Lb;j++)
nc[i+j-1]+=na[i]*nb[j];
for(int i=1;i<=La+Lb;i++
{
//统一进位
nc[i+1]+=nc[i]/10;
nc[i]&=10;
}
if(nc[La+Lb])//判断第i+j位上的数是否为0
s+=nc[La+Lb]+'0';
for(int i=La+Lb-1;i>=1;i--)
s+=nc[i]+'0';//将整形数组转成字符串
return s;
}
int main()
{
cin>>A>>B;//数据输入
cout<<plush(A,B);结果输出
return 0;
}