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; }};新闻热点
疑难解答