給定兩個以字符串形式表示的非負整數?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)或直接將輸入轉換為整數來處理。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/multiply-strings
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
解法:
class Solution {
public:string multiply(string num1, string num2) {string res = "";int m = num1.size(), n = num2.size();vector<int> vals(m + n);for (int i = m - 1; i >= 0; --i) {for (int j = n - 1; j >= 0; --j) {int mul = (num1[i] - '0') * (num2[j] - '0');int p1 = i + j, p2 = i + j + 1, sum = mul + vals[p2];vals[p1] += sum / 10;vals[p2] = sum % 10;}}for (int val : vals) {if (!res.empty() || val != 0) res.push_back(val + '0');}return res.empty() ? "0" : res;}
};
?