首页 » 编程之美 » 正文

[leetcode_43]Multiply Strings

大整数乘法

class Solution {
public:
    string multiply(string num1, string num2) {
        string ans = "";
        int inbit;
        // gen table
        vector<vector<int>>table;
        table.clear();
        for(int i = num1.length()-1;i >= 0;i--) {
            vector<int>item;
            item.clear(); 
            inbit = 0;
            for(int k = 0;k < num1.length()-1-i;k++)
                item.push_back(0);
            for(int j = num2.length()-1;j >= 0;j--) {
                int tmp = (num1[i] - '0') * (num2[j] - '0') + inbit;
                inbit = tmp / 10;
                item.push_back(tmp % 10);
            }
            if(inbit != 0)
                item.push_back(inbit);
            table.push_back(item);
        }
        // calc ansint
        vector<int>ansint;
        ansint.clear();
        int len = table[table.size()-1].size();
        inbit = 0;
        for(int i = 0;i < len;i++) {
            int tmp = inbit;
            for(int j = 0;j < table.size();j++) {
                if(table[j].size() > i) {
                    tmp += table[j][i];
                }
            }
            inbit = tmp / 10;
            ansint.push_back(tmp % 10);
        }
        if(inbit != 0)
            ansint.push_back(inbit);
        bool flag = false;
        for(int i = ansint.size()-1;i >= 0;i--) {
            if(ansint[i] == 0 && i != 0 && flag == false)continue;
            ans.push_back(ansint[i] + '0');
            flag = true;
        }
        return ans;
    }
};

发表评论