您的位置:首页 > 其它

43. Multiply Strings

2017-02-08 10:57 323 查看
Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2.

Note:

The length of both num1 and num2 is < 110.

Both num1 and num2 contains only digits 0-9.

Both num1 and num2 does not contain any leading zero.

You must not use any built-in BigInteger library or convert the inputs to integer directly.

class Solution {
public:
string add(string num1, string num2){
string ans;
int c = 0, i, j;
for(i = num1.length() - 1, j = num2.length() - 1; i >= 0 && j >= 0; --i, --j){
int s = (num1[i] - '0') + (num2[j] - '0') + c;
ans.push_back(s % 10 + '0');
c = s / 10;
}
while(i >= 0){
int s = (num1[i] - '0') + c;
ans.push_back(s % 10 + '0');
c = s / 10;
--i;
}
while(j >= 0){
int s = (num2[j] - '0') + c;
ans.push_back(s % 10 + '0');
c = s / 10;
--j;
}
if(c) ans.push_back(c + '0');
reverse(ans.begin(), ans.end());
return ans;
}
string multiply(string num1, string num2) {
vector<string> v;
int c = 0, i, j, k = 0;
for(i = num1.length() - 1; i >= 0; --i, ++k){
string tmp;
c = 0;
for(j = num2.length() - 1; j >= 0; --j){
int s = (num1[i] - '0') * (num2[j] - '0') + c;
tmp.push_back(s % 10 + '0');
c = s / 10;
}
if(c) tmp.push_back(c + '0');
reverse(tmp.begin(), tmp.end());
for(int cnt = 0; cnt < k; ++cnt)
tmp.push_back('0');
v.push_back(tmp);
}
string ans = "0";
//   cout << v[0] << '\t' << v[1] << endl;
for(i = 0; i < v.size(); ++i){
ans = add(ans, v[i]);
}
if(ans[0] == '0') ans = "0";
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: