Multiply Strings
2013-04-08 22:24
169 查看
经典的大数相乘算法,先试着在纸上写了一遍,发现勾来划去简直没法看啊,跟个草稿纸一样,要在面试时这么写,估计马上就跪了。看来算法一旦复杂一点在纸上写的功力就差很多啊!!
贴一份自己写的代码吧,主要是模拟人做乘法:
发现可读性也不好,变量的使用和命名乱起八糟的。。。。。。。。。
贴一份自己写的代码吧,主要是模拟人做乘法:
发现可读性也不好,变量的使用和命名乱起八糟的。。。。。。。。。
string multiply(string num1,string num2) { int len1=num1.length(),len2=num2.length(); if (len1==0||len2==0) return "0"; bool isNeg1=false,isNeg2=false; int head1=0,head2=0,tail1=len1-1,tail2=len2-1; if ( num1[0]=='+' || num1[0]=='-') { isNeg1=num1[0]=='-'; head1++; } if ( num2[0]=='+' || num2[0]=='-') { isNeg2=num2[0]=='-'; head2++; } string res=string(len1+len2+2,'0'); int tailr=res.length()-1; int pNum1=tail1,pNum2=tail2,pCur=tailr; while(pNum2>=head2) { pCur=tailr; pNum1=tail1; int carry=0; while(pNum1>=head1) { int times=(num1[pNum1]-'0')*(num2[pNum2]-'0')+carry+res[pCur]-'0'; res[pCur]=times%10+'0'; carry=times/10; pNum1--; pCur--; } while(carry) { int tmp=carry+res[pCur]-'0'; res[pCur]=tmp%10+'0'; carry=tmp/10; pCur--; } tailr--; pNum2--; } int unused=0; int i=0; int lenRes=res.length(); for(i=0;i<lenRes;i++) { if (res[i]>'0') { break; } else unused++; } if ( i==lenRes) //all '0' return "0"; else { string ans; if ( (isNeg1&&!isNeg2)||(!isNeg1&&isNeg2)) ans.push_back('-'); for(int i=unused;i<lenRes;i++) ans.push_back(res[i]); return ans; } }
相关文章推荐
- Multiply Strings
- LeetCode-Multiply Strings
- leetcode:Multiply Strings
- LeetCode: Multiply Strings [042]
- [LeetCode] Multiply Strings
- leetcode做题总结,题目Multiply Strings 43
- LeetCode--Multiply Strings
- Multiply Strings
- Java for LeetCode 043 Multiply Strings
- Leetcode #43 Multiply Strings
- Leetcode: Multiply Strings
- Leetcode Multiply Strings
- LeetCode -- Multiply Strings
- LeeCode_MultiplyStrings
- leetcode 043 Multiply Strings
- 43. Multiply Strings
- 43. Multiply Strings
- Multiply Strings
- DAY18:leetcode #43 Multiply Strings
- 415/43 Add Strings/Multiply Strings