Home Multiply Strings
Post
Cancel

LeetCode #43: Multiply Strings (C/C++).

medium

source: https://leetcode.com/problems/multiply-strings/
C/C++ Solution to LeetCode problem 43. Multiply Strings.

Problem


Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string.

Note: You must not use any built-in BigInteger library or convert the inputs to integer directly.

Examples


Example 1:

Input: num1 = “2”, num2 = “3”
Output: “6”

Example 2:

Input: num1 = “123”, num2 = “456”
Output: “56088”

Constraints


  • 1 <= num1.length, num2.length <= 200
  • num1 and num2 consist of digits only.
  • Both num1 and num2 do not contain any leading zero, except the number 0 itself.

Solution


The solution is simple, I just follow this steps:

source: https://www.cuemath.com/numbers/2-digit-multiplication/

The only difference is, in the step 2 I’m adding the previous while multiplying.

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
class Solution {
public:
  string multiply(string num1, string num2) {
    if (num1 == "0" || num2 == "0")
      return "0";
    if (num1 == "1" || num2 == "1")
      return num1 == "1" ? num2 : num1;

    int p0=0;
    int p1=0;
    string ans="";
    for (int b=num2.size()-1; b>=0; b--) {
      int c = 0;
      p1 = p0;
      for (int a=num1.size()-1; a>=0; a--) {
        int r = ((num2[b] - 48) * (num1[a] - 48)) + c;
        if (ans.size() > 0 && p1 < ans.size())
          r += (ans[(ans.size()-1) - p1] - 48);
        
        c = r / 10;
        r = r % 10;

        if (p0>0 and p1 < ans.size())
          ans[ans.size()-1-p1] = r + 48;
        else
          ans = to_string(r) + ans;

        if (a == 0 && c != 0)
          ans = to_string(c) + ans;

        p1++;
      }
      p0++;
    }
    return ans;
  }
};
This post is licensed under CC BY 4.0 by the author.

Combination Sum II

Trapping Rain Water