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.
思路:模拟大数相乘,比较简单。
class Solution { public: string multiply(string num1, string num2) { string s; string sum,tmp; if(num1.length()<=num2.length()) { s = num1; num1 = num2; num2 = s; } int len1 = num1.length(); int len2 = num2.length(); int i,j,k,len; int flag; char ch; sum = "0"; for(i=len2-1; i>=0; --i) { flag = 0; s = ""; for(k=0; k<len2-1-i; ++k) s.push_back('0'); for(j=len1-1; j>=0; --j) { ch = '0' + ((num2[i]-'0')*(num1[j]-'0')+flag)%10; flag = ((num2[i]-'0')*(num1[j]-'0')+flag)/10; s.push_back(ch); } if (flag > 0) s.push_back(flag + '0'); len = (s.length() >= sum.length() ? s.length() : sum.length()); flag = 0; tmp = ""; for(k=0; k<len; k++) { if (k >= s.length()) { tmp.push_back((sum[k]-'0'+flag)%10 + '0'); flag = (sum[k]-'0'+flag)/10; } else if (k >= sum.length()) { tmp.push_back((s[k]-'0'+flag)%10 + '0'); flag = (s[k]-'0'+flag)/10; } else { tmp.push_back((sum[k]-'0'+flag + s[k]-'0')%10 + '0'); flag = (sum[k]-'0'+flag + s[k]-'0')/10; } } if (flag == 1) tmp.push_back('1'); sum = tmp; } string result(sum.rbegin(), sum.rend()); s = ""; len = result.length(); for(i=0; i<len; i++) { if (result[i] == '0') { continue; } for(j=i; j<len; ++j) s.push_back(result[j]); break; } if (s.length() == 0) s.push_back('0'); return s; } };