思路:以s1=“999”,s2=”66”为例,见下图。
C++代码实现:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
//
vector<int> stoint(const string &s)
{
vector<int> v;
size_t sz = s.size();
for (size_t i=0;i<sz;++i)
{
v.push_back(int(s[i]-'0'));
}
return v;
}
string _multiple(const string &s1,const string &s2)
{
//如果有一个数为0
if (string("0") == s1 || string("0") == s2)
{
return string("0");
}
vector<int> v1 = stoint(s1);
vector<int> v2 = stoint(s2);
int len1 = s1.size();
int len2 = s2.size();
vector<int> v;
for (int i=0;i<len1+len2;++i)
{
v.push_back(0);
}
for(int i=0;i<len1;++i)
{
for (int j=0;j<len2;++j)
{
v[i+j] += v1[len1-i-1]*v2[len2-j-1];
}
}
string s;
//进位
int d =0;
for (int i=0;i<len1+len2;++i)
{
s = char((v[i]+d)%10 + '0') + s;
d = (v[i]+d)/10;
}
while (d)
{
s = char(d%10 + '0') + s;
d/=10;
}
//将多余的0去掉
s.erase(0,s.find_first_not_of('0'));
return s;
}
int main()
{
string s1="999";
string s2="66";
string s = _multiple(s1,s2);
cout<<s<<endl;
return 0;
}
测试结果: