1. 程式人生 > >[leetcode] 43 Multiply Strings(模擬大數乘法)

[leetcode] 43 Multiply Strings(模擬大數乘法)

很簡單的題目,模擬大數乘法。

思路: 

第一個字串的第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'));
    }
};