Given two numbers represented as strings, return multiplication of the numbers as a string.
Note:
- The numbers can be arbitrarily large and are non-negative.
- Converting the input string to integer is NOT allowed.
- You should NOT use internal library such as BigInteger.
Subscribe to see which companies asked this question
class Solution {
public:
string addTwo(string ans, string cur, int index) {
int i=0, j=0;
string ret="";
if(ans == "") return cur;
else {
i = ans.length()-1;
while(index--) {
ret += ans[i];
i--;
}
int cnt = 0;
for(j = cur.length()-1; i >= 0 && j >= 0; i--, j--) {
int sum = cur[j]-'0'+ans[i]-'0'+cnt;
cnt = sum/10;
sum = sum%10;
ret += (char)(sum+'0');
}
if(i >= 0) {
for(; i >= 0; i--) {
int sum = ans[i]-'0'+cnt;
cnt = sum/10;
sum = sum%10;
ret += (char)(sum+'0');
}
}
if(j >= 0) {
for(; j >= 0; j--) {
int sum = cur[j]-'0'+cnt;
cnt = sum/10;
sum = sum%10;
ret += (char)(sum+'0');
}
}
if(cnt > 0) {
ret += (char)('0'+cnt);
}
reverse(ret.begin(), ret.end());
return ret;
}
}
string multiply(string num1, string num2) {
int len1 = num1.length(), len2 = num2.length();
if(len1==0 || len2 == 0) return "";
if(num1=="0" || num2=="0") return "0";
string ans = "";
if(len1 > len2) {
string s = num2;
num2 = num1;
num1 = s;
}
for(int i = num1.length()-1; i >= 0; i--) {
int cnt = 0;
string tmp = "";
for(int j = num2.length()-1; j >= 0; j--) {
int sum = (num2[j]-'0')*(num1[i]-'0')+cnt;
cnt = sum/10;
sum = sum%10;
tmp = tmp + (char)(sum+'0');
}
if(cnt > 0) {
tmp = tmp + (char)(cnt+'0');
}
reverse(tmp.begin(), tmp.end());
cout << tmp << endl;
ans = addTwo(ans, tmp, num1.length()-1-i);
}
return ans;
}
};