leetcode 43 字符串相乘題解

給定兩個以字符串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示爲字符串形式。

示例 1:

輸入: num1 = “2”, num2 = “3”
輸出: “6”
示例 2:

輸入: num1 = “123”, num2 = “456”
輸出: “56088”
說明:

num1 和 num2 的長度小於110。
num1 和 num2 只包含數字 0-9。
num1 和 num2 均不以零開頭,除非是數字 0 本身。
不能使用任何標準庫的大數類型(比如 BigInteger)或直接將輸入轉換爲整數來處理。

思路:把相乘的結果先不進位,等將所有相乘的結果相加後在進行進位即可

class Solution {
public:
    string multiply(string num1, string num2) {
        if(num1 == "0" || num2 == "0") {
            return "0";
        }
        int n1 = num1.size();
        int n2 = num2.size();
        reverse(num1.begin(), num1.end());
        reverse(num2.begin(), num2.end());
        int n3 = n1+n2;
        int* res = new int[n1+ n2]{0};
        for (int i=0;i<n2;i++){
            for (int j=0;j<n1;j++){
                res[i+j] += (num2[i]-'0')*(num1[j]-'0');
            }
        }
        for (int i=0;i<n1+n2;i++){
            if(res[i]>9){
                int a = res[i]%10;
                int b = res[i]/10;
                res[i] = a;
                res[i+1] += b;
            }
        }
        string result = "";
        int flag;
        if (res[n1+n2-1]==0){
            flag = n1+n2-1;
        } else {
            flag = n1+n2;
        }
        for (int i = 0;i<flag;i++){
            result += (res[i] + '0');
        }
        reverse(result.begin(), result.end());
        return result;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章