Leetcode: Multiply Strings
2013-10-27 23:34
393 查看
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.
方法一:模拟手算乘法
方法二:
Note: The numbers can be arbitrarily large and are non-negative.
方法一:模拟手算乘法
string addTwoString(string num1, string num2) { int len1 = num1.size()-1; int len2 = num2.size()-1; bool carry = false; string res = ""; while(len1 >=0 && len2 >=0) { int a = num1[len1]-'0'; int b = num2[len2]-'0'; int c = a+b; if(carry) { c+=1; carry=false; } if(c>9) { carry=true; c -= 10; } char tmp = '0'+c; res = tmp + res; len1--; len2--; } string pre=""; if(len1>=0) pre=num1.substr(0,len1+1); else if(len2>=0) pre=num2.substr(0,len2+1); if(carry){ int sz=pre.size()-1; while(sz>=0 && pre[sz]=='9') { pre[sz]='0'; sz--; } if(sz<0) pre='1'+pre; else pre[sz]+=1; } res = pre+res; return res; } string multiplyOneBit(string num1, int num2) { int len = num1.size(); int* res = new int[len+1]; memset(res,0,sizeof(int)*(len+1)); for(int i=len;i>0;i--) { res[i] += (num1[i-1]-'0')*num2; res[i-1] += res[i]/10; res[i] %= 10; } string ss=""; for(int i=0; i<=len; i++) ss += char('0' + res[i]); return ss; } string multiply(string num1, string num2) { // Note: The Solution object is instantiated only once. if(num1=="0" || num2=="0") return "0"; int l1 = num1.length(), l2 = num2.length(); string res=""; for(int i =0; i< l2;i++) { res+='0'; string tmp = multiplyOneBit(num1,num2[i]-'0'); res = addTwoString(res,tmp); } res = res[0]=='0'? res.substr(1):res; return res; }
方法二:
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; }
相关文章推荐
- leetcode(43)Multiply Strings
- [leetcode] Multiply Strings
- Leetcode_multiply-strings (updated c++ and python version)
- LeetCode Multiply Strings 大数相乘
- LeetCode 43 Multiply Strings
- LeetCode 043 Multiply Strings
- 【leetcode】Multiply Strings
- [LeetCode]题解(python):043-Multiply Strings
- Multiply Strings leetcode java
- LeetCode-Multiply Strings
- [Leetcode] Multiply strings 字符串对应数字相乘
- LeetCode---Multiply Strings
- leetcode(43) - Multiply Strings
- [leetcode] Multiply Strings
- Multiply Strings--LeetCode
- leetcode--Multiply Strings
- [Leetcode] #43 Multiply Strings
- leetcode Multiply Strings
- [LeetCode] Multiply Strings
- LeetCode:Multiply Strings