详细的算法思路参见我以前的一篇博客:大整数相乘
C++代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
//将原字符处转换成数组存放
vector<int> stoint(const string &s)
{
vector<int> res;
for (int i=s.size()-1;i>=0;--i)
{
res.push_back(s[i]-'0');
}
return res;
}
string multiply(string num1, string num2) {
//如果有一个数为零
if (num1 == "0" || num2 == "0")
return "0";
vector<int> n1 = stoint(num1);
vector<int> n2 = stoint(num2);
vector<int> res(n1.size()+n2.size()-1, 0);
for (int i=0;i<n1.size();++i)
{
for (int j=0;j<n2.size();++j)
{
res[i+j] += n1[i]*n2[j];
}
}
string s_res;
int d = 0;
for (int i=0;i<res.size();++i)
{
//加上低位的进位
res[i] += d;
//保存该位的值
s_res = char(res[i]%10+'0')+s_res;
d = res[i]/10;
}
//如果进位不为零
while (d)
{
s_res = char(d%10+'0')+s_res;
d /= 10;
}
return s_res;
}
};
int main()
{
Solution s;
cout<<s.multiply("66", "999");
return 0;
}