大数相乘要用到大数加法,前边已经写过大数加法,在这儿直接调用。
#include<stdio.h>
#include<iostream>
#include<string>
#include<algorithm>
#include<string.h>
using namespace std;
string add(string st1,string st2)
{
if(st1.size()<st2.size()) //判断哪个长
{
string stemp=st1;
st1=st2;
st2=stemp;
}
reverse(st1.begin(),st1.end()); //将string类st1,st2逆转顺序
reverse(st2.begin(),st2.end());
int len1,len2;
len1=st1.length(); //计算各自的长度
len2=st2.length();
int in=0,num; //进位in初始化为0
for(int i=0; i<len2; i++)
{
num=st1[i]-'0'+st2[i]-'0'+in; //各位的和
in=num/10;
num%=10;
st1[i]=num+'0'; //放入较长的string里
}
for(int j=len2; j<len1; j++) //如果遇到例如123 99892这样的样例,123处理完后需要向前边进位
{
num=st1[j]-'0'+in;
in=num/10;
num%=10;
st1[j]=num+'0';
}
if(in==1) //相加的结果比原有的string都长
st1+="1";
reverse(st1.begin(),st1.end());
return st1;
}
string multiplication(string st1,string st2)
{
if(st1[0]=='0'||st2[0]=='0')
return "0";
reverse(st1.begin(),st1.end());
reverse(st2.begin(),st2.end());
int len1,len2,len;
len1=st1.length(),len2=st2.length();
if(len1<len2)
{
string stemp=st1;
st1=st2;
st2=stemp;
}
len1=st1.size();
len=len2=st2.length();
string stnum;
for(int i=0; i<len; i++)
{
string stemp;
for(int k=0; k<i; k++)
{
stemp+="0";
}
int muti,in=0;
for(int j=0; j<len1; j++)
{
muti=(st2[i]-'0')*(st1[j]-'0')+in;
in=muti/10;
muti=muti%10;
stemp+=muti+'0';
}
if(in>0)
stemp+=in+'0';
reverse(stemp.begin(),stemp.end());
// cout<<stemp<<endl;
stnum= add(stnum,stemp);
}
return stnum;
}
int main()
{
// freopen("INput.txt","r",stdin);
// freopen("OUT.txt","w",stdout);
string s1,s2;
while(cin>>s1>>s2)
{
cout<<multiplication(s1,s2)<<endl;
}
return 0;
}