43. Multiply Strings (大数乘法)

 

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

Example 1:

Input: num1 = "2", num2 = "3"
Output: "6"

Example 2:

Input: num1 = "123", num2 = "456"
Output: "56088"

Note:

  1. The length of both num1 and num2 is < 110.
  2. Both num1 and num2 contain only digits 0-9.
  3. Both num1 and num2 do not contain any leading zero, except the number 0 itself.
  4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

 

 

 

 

class Solution:
    def multiply(self, num1: str, num2: str) -> str:
        
        def single_mul(num1,ch):
            res = ""
            carry = 0
            for ch1 in num1[::-1]:
                tt = int(ch1) * int(ch) + carry
                res += str(tt%10)
                carry = tt//10
            if carry:
                res+=str(carry)
            return list(reversed(res))

        def merge_list(num1,num2):
            new = []
            carry = 0
            #print(num1,num2)
            while num1 and num2:
                res = int(num1.pop()) + int(num2.pop()) + carry
                new.append(str(res%10))
                carry = res // 10
            while num1 :
                res = int(num1.pop()) + carry
                new.append(str(res%10))
                carry = res // 10
            while num2:
                res = int(num2.pop()) + carry
                new.append(str(res%10))
                carry = res // 10
            if carry:
                new.append(str(carry))
            return new[::-1]
        res_list = []
        n2 = len(num2)
        for i in range(n2):
            res = single_mul(num1,num2[n2-i-1])
            #print(res_list)
            res_list = merge_list(res,res_list[:-(i)]) + res_list[-(i):]
        if res_list[0] == '0':
            return '0'
        return ''.join(res_list)

 

 

 

 

 

 

 

 

 

 

 1 class Solution {
 2     public String multiply(String num1, String num2) {
 3     int m = num1.length(), n = num2.length();
 4     int[] pos = new int[m + n];
 5    
 6     for(int i = m - 1; i >= 0; i--) {
 7         for(int j = n - 1; j >= 0; j--) {
 8             int mul = (num1.charAt(i) - '0') * (num2.charAt(j) - '0'); 
 9             int p1 = i + j, p2 = i + j + 1;
10             int sum = mul + pos[p2];
11 
12             pos[p1] += sum / 10;
13             pos[p2] = (sum) % 10;
14         }
15     }  
16     
17     StringBuilder sb = new StringBuilder();
18     for(int p : pos) 
19         if(!(sb.length() == 0 && p == 0)) 
20             sb.append(p);
21     return sb.length() == 0 ? "0" : sb.toString();
22 
23     }
24 }

 

posted @ 2018-08-11 00:29  乐乐章  阅读(159)  评论(0编辑  收藏  举报