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:
- The length of both
num1
andnum2
is < 110. - Both
num1
andnum2
contain only digits0-9
. - Both
num1
andnum2
do not contain any leading zero, except the number 0 itself. - 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 }