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.
Subscribe to see which companies asked this question
class Solution {
public:
string multiply(string num1, string num2) {
if(num1 == "0" || num2 == "0")
return "0";
int len1 = num1.size();
int len2 = num2.size();
int len = len1 + len2;
int *iNum1 = new int[len1]();
int *iNum2 = new int[len2]();
int *result = new int[len1 + len2]();
for(int i = 0; i < len1; i++)
iNum1[i] = num1[i] - '0';
for(int i = 0; i < len2; i++)
iNum2[i] = num2[i] - '0';
for(int i = 0; i < len1; i++) {
for(int j = 0; j < len2; j++) {
result[i + j + 1] += iNum1[i] * iNum2[j];
}
}
#if 0
for(int i = 0; i < len ; i++)
cout << result[i] << " ";
cout << endl;
#endif
for(int i = len - 1; i> 0; i--) {
result[i - 1] += result[i] / 10;
result[i] %= 10;
}
#if 0
for(int i = 0; i < len ; i++)
cout << result[i] << " ";
cout << endl;
#endif
string ret = "";
for(int i = 0; i < len; i++)
ret.append(1, result[i] + '0');
if(ret[0] == '0')
return ret.substr(1);
return ret;
}
};