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)或直接将输入转换为整数来处理。

思路

打算用java的大数类来做,但题目中要求不能用;
高精度加上模拟乘法就可以了(注意去除前导零)。

AC代码
class Solution {
public:
    string multiply(string a, string b) {
        string ans = solve(a, b);
        return ans;
    }

    string solve(string a, string b) {
        int n = a.size(), m = b.size();
        vectorint A, B;
        for (int i = n - 1; i = 0; i --) A.push_back(a[i] - '0');
        for (int i = m - 1; i = 0; i --) B.push_back(b[i] - '0');

        vectorint C(n + m);
        for (int i = 0; i  n; i ++)
            for (int j = 0; j  m; j ++)
                C[i + j] += A[i] * B[j];
        
        for (int i = 0, t = 0; i  C.size(); i ++) {
            t += C[i];
            C[i] = t % 10;
            t /= 10;
        }

        int k = C.size() - 1;
        while (k  0  !C[k]) k --;

        string ans;
        while (k = 0) ans += C[k --] + '0';
        
        return ans;
    }
};
最新回复(0)
/jishuq9BmljE3Pr0l1MBdDLzYLer2_2Bl6gzlZdwgLcaB2_2BoUo_3D4858770
8 简首页