使用性质:
- 长为n的数和长为m的数相乘的结果最大长度为m+n;
- 结果存在数组res中,num1[i]*num2[j]的结果为两位数tmp(0x或者xy),其中第一位位于
- res[i+j], 第二位位于res[i+j+1]。
-
代码:
-
string multiply(string& num1, string& num2)
{
vector<int> arr1;
vector<int> arr2;for(int i=0; i < num1.length(); ++i)
{
arr1.push_back((num1[i]-'0'));
}
for(int i=0; i < num2.length(); ++i)
{
arr2.push_back(num2[i] - '0');
}int n,m;
n = arr1.size();
m = arr2.size();
vector<int> ret;
ret.resize(n + m + 1, 0);for(int i=n-1; i >=0; --i)
{
for(int j=m; j >= 0; --j)
{
int s = ret[i+j+1] + arr1[i] * arr2[j];
ret[i+j+1] = s%10;
ret[i+j] += s/10;
}
}stringstream s;
for(int i=0; i < n+m; ++i)
{
if (i == 0 && ret[i] == 0) continue;
s<<ret[i];
}
return s.str();
}int main()
{
string str1 = "123";
string str2 = "224";string ret = multiply(str1, str2);
printf("result = %s \n", ret.c_str());
return 0;
}