• LeetCode(43):字符串相乘


    Medium!

    题目描述:

    给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

    示例 1:

    输入: num1 = "2", num2 = "3"
    输出: "6"

    示例 2:

    输入: num1 = "123", num2 = "456"
    输出: "56088"

    说明:

    1. num1 和 num2 的长度小于110。
    2. num1 和 num2 只包含数字 0-9
    3. num1 和 num2 均不以零开头,除非是数字 0 本身。
    4. 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

    解题思路:

    这道题让我们求两个字符串数字的相乘,输入的两个数和返回的数都是以字符串格式储存的,这样做的原因可能是这样可以计算超大数相乘,可以不受int或long的数值范围的约束,那么我们该如何来计算乘法呢,我们小时候都学过多位数的乘法过程,都是每位相乘然后错位相加,那么这里就是用到这种方法,参见http://www.cnblogs.com/TenosDoIt/p/3735309.html,把错位相加后的结果保存到一个一维数组中,然后分别每位上算进位,最后每个数字都变成一位,去除掉首位0,把每位上的数字按顺序保存到结果中即可。

    我们以289*785为例:

    C++解法一:

     1 class Solution {
     2 public:
     3     string multiply(string num1, string num2) {
     4         string res;
     5         int n1 = num1.size(), n2 = num2.size();
     6         int k = n1 + n2 - 2, carry = 0;
     7         vector<int> v(n1 + n2, 0);
     8         for (int i = 0; i < n1; ++i) {
     9             for (int j = 0; j < n2; ++j) {
    10                 v[k - i - j] += (num1[i] - '0') * (num2[j] - '0');
    11             }
    12         }
    13         for (int i = 0; i < n1 + n2; ++i) {
    14             v[i] += carry;
    15             carry = v[i] / 10;
    16             v[i] %= 10;
    17         }
    18         int i = n1 + n2 - 1;
    19         while (v[i] == 0) --i;
    20         if (i < 0) return "0";
    21         while (i >= 0) res.push_back(v[i--] + '0');
    22         return res;
    23     }
    24 };
  • 相关阅读:
    Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常
    BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
    Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
    Codeforces 316G3 Good Substrings 字符串 SAM
    Codechef CHSIGN Change the Signs(May Challenge 2018) 动态规划
    BZOJ1396 识别子串 字符串 SAM 线段树
    CodeForces 516C Drazil and Park 线段树
    CodeForces 516B Drazil and Tiles 其他
    CodeForces 516A Drazil and Factorial 动态规划
    SPOJ LCS2
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/9139468.html
Copyright © 2020-2023  润新知