大数乘法
string multiply(string a,string b)
{
if(a.find_first_of('0')==0||b.find_first_of('0')==0)
return "0";
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int lenA=a.length();
int lenB=b.length();
int len=lenA+lenB;
string ans(len,'0');
int tmp=0;
for(int i=0;i<lenA;i++)
for(int j=0;j<lenB;j++){
tmp = (ans[i+j]-'0')+(a[i]-'0')*(b[j]-'0');
ans[i+j] = tmp%10+'0';
tmp/=10;
ans[i+j+1] = tmp+'0';
}
reverse(ans.begin(),ans.end());
return ans.substr(ans.find_first_not_of('0'));
}
算法介绍:
参数:两个string型的字符串,代表传入的两个乘数
返回值:string型的字符串
注意:不允许有小数点
例:
string a="50";
string b="20";
cout<<multiply(a,b);//输出1000