[leetcode_43] Multiply Strings

大整数乘法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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;
    }
};
Licensed under CC BY-NC-SA 4.0