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.
分析:大数乘法运算,巧妙的使用数组来模拟计算。若两个数长度为l1, l2那么结果长度最大为l1 + l2。
class Solution {
public:
string multiply(string num1, string num2) {
if(num1=="0" || num2=="0") return "0";
int l1 = num1.length(), l2 = num2.length();
int* res = new int[l1+l2];
memset(res,0,sizeof(int)*(l1+l2));
for(int i=0; i<l1; ++i)
for (int j=0; j<l2; ++j)
res[i+j+1] += (num1[i] - '0') * (num2[j] - '0');
string ss = "";
for (int k=l1+l2-1; k>=0; --k){
if(k>0) res[k-1] += res[k]/10;
res[k] %= 10;
ss = char(res[k]+'0')+ss;
}
ss = ss[0]=='0'? ss.substr(1):ss;
return ss;
}
};
当然迭代计算时,也可以用进位标记为来辅助计算。
string ss = "";
int flag = 0;
for (int k=l1+l2-1; k>=0; --k){
//进位计算
int tmp = (res[k] + flag) / 10;
//结果计算
res[k] = (res[k] + flag) % 10;
flag = tmp;
ss = char(res[k]+'0')+ss;