[leetcode] 43 Multiply Strings(模擬大數乘法)
阿新 • • 發佈:2019-02-09
很簡單的題目,模擬大數乘法。
思路:
第一個字串的第i位乘以第二個字串的第j位一定是結果的第i+j位,如果i+j已經有值,直接加上去就OK,並用temp儲存進位,
最後記得將結果反轉,去掉前置0。這樣的演算法的複雜度是O(n2).利用FFT可以將演算法優化到O(nlogn),關於FFT的實現在此不再贅述,可以參考演算法導論或者網上其他資料。
另外,我的部落格中實現了關於大數加減乘除的詳細程式碼,請參考我的 部落格連結:
http://blog.csdn.net/nk_test/article/details/48912763
class Solution { public: string multiply(string num1, string num2) { string s(1000,'0'); reverse(num1.begin(),num1.end()); reverse(num2.begin(),num2.end()); for(int i=0;i<num1.length();i++) for(int j=0;j<num2.length();j++) { int temp=(num1[i]-'0')*(num2[j]-'0'); s[i+j+1]=s[i+j+1]-'0'+(s[i+j]-'0'+temp)/10+'0'; s[i+j]=(s[i+j]-'0'+temp)%10+'0'; } reverse(s.begin(),s.end()); if(s.find_first_not_of('0')==string::npos) return "0"; else return s.substr(s.find_first_not_of('0')); } };