说明:如果乘数为A和B,A的位数为m,B的位数为n,则乘积结果为m+n-1位(最高位无进位)或m+n位(最高位有进位)。

代码如下:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string BigMultiply(string, string);
int main() {
string s1, s2;
//用goto语句测试
p:
cin >> s1 >> s2;

string sret = BigMultiply(s1, s2);
cout << sret << endl<<endl;
goto p;
return 0;
}
string BigMultiply(string s1, string s2) {
//1.反转
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());

int len1 = s1.length();
int len2 = s2.length();
//2.创建两个乘数长度和的存储空间并初始化
char *res = new char[len1 + len2];
for (int i = 0; i < len1+len2; i++)
{
res[i] = '0';
}

//3.具体算法
for (int j = 0; j < len2; j++) {
int ad = 0;//进位
int n2 = s2[j]-'0';//第二个乘数取值
int i=0;//第一个数`位标志
for (; i < len1; i++) {
int r = n2*(s1[i]-'0')+ad+(res[j+i]-'0');
res[j+i] = r % 10+'0';
ad = r / 10;
}
res[j + i ] += ad;
}

//4.返回结果
string sret(res, len1 + len2);
sret = sret.substr(0, sret.find_last_not_of('0')+1);
reverse(sret.begin(), sret.end());
return

运行效果:

大数相乘_大数乘法