LeetCode: Multiply Strings
Title:
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.
不难,但是也不容易一次AC,说明自己考虑问题不够仔细
class Solution { public: string multiply(string num1, string num2) { string result; result.push_back('0'); if ((num1.size() == 1 && num1[0] == '0') || (num2.size() == 1 && num2[0] == '0')) return result; for (int i = num2.size()-1; i >= 0; i--){ int plus = 0; string s; for (int t = 0; t<num2.size()-i-1; t++){ s.push_back(result[t]); } int a = num2[i] - '0'; int p = num2.size() - i -1; for (int j = num1.size()-1; j >=0; j--){ int m; int b= num1[j]-'0'; if (p < result.size()) m = a * b + plus + result[p]-'0'; else m = a * b + plus; p++; plus = m / 10; s.push_back((m % 10)+'0'); } if (plus != 0) s.push_back(plus+'0'); result = s; //results.push_back(result); } reverse(result.begin(),result.end()); return result; } };
更好的方法
class Solution { public: string multiply(string num1, string num2) { if(num1=="0" || num2=="0") return "0"; int l1 = num1.length(), l2 = num2.length(); int* n1 = new int[l1]; int* n2 = new int[l2]; int* res = new int[l1+l2]; memset(res,0,sizeof(int)*(l1+l2)); for(int i=0; i<l1; ++i) n1[i] = num1[i] - '0'; for(int i=0; i<l2; ++i) n2[i] = num2[i] - '0'; for(int i=0; i<l1; ++i) for (int j=0; j<l2; ++j) res[i+j+1] += n1[i]*n2[j]; 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.empty()?"0":ss; return ss; } };