25
25
<li>Both <code>num1</code> and <code>num2</code> do not contain any leading zero, except the number <code>0</code> itself.</li>
26
26
</ul >
27
27
28
-
29
28
## Solutions
30
29
31
30
<!-- tabs:start -->
32
31
33
32
### ** Python3**
34
33
35
34
``` python
36
-
35
+ class Solution :
36
+ def multiply (self , num1 : str , num2 : str ) -> str :
37
+ def add (s1 , s2 ):
38
+ n1, n2 = len (s1), len (s2)
39
+ i = carry = 0
40
+ res = []
41
+ while i < max (n1, n2) or carry > 0 :
42
+ a = int (s1[n1 - i - 1 ]) if i < n1 else 0
43
+ b = int (s2[n2 - i - 1 ]) if i < n2 else 0
44
+ carry, t = divmod (a + b + carry, 10 )
45
+ res.append(str (t))
46
+ i += 1
47
+ return ' ' .join(res[::- 1 ])
48
+
49
+ if ' 0' in [num1, num2]:
50
+ return ' 0'
51
+ n1, n2 = len (num1), len (num2)
52
+ ans = ' '
53
+ for i in range (n1):
54
+ a = int (num1[n1 - i - 1 ])
55
+ t = ' '
56
+ for j in range (n2):
57
+ b = int (num2[n2 - j - 1 ])
58
+ t = add(t, str (a * b) + ' 0' * j)
59
+ ans = add(ans, t + ' 0' * i)
60
+ return ans
37
61
```
38
62
39
63
### ** Java**
40
64
41
65
``` java
66
+ class Solution {
67
+ public String multiply (String num1 , String num2 ) {
68
+ if (Objects . equals(num1, " 0" ) || Objects . equals(num2, " 0" )) {
69
+ return " 0" ;
70
+ }
71
+ int n1 = num1. length(), n2 = num2. length();
72
+ String ans = " " ;
73
+ for (int i = 0 ; i < n1; ++ i) {
74
+ int a = num1. charAt(n1 - i - 1 ) - ' 0' ;
75
+ String t = " " ;
76
+ for (int j = 0 ; j < n2; ++ j) {
77
+ int b = num2. charAt(n2 - j - 1 ) - ' 0' ;
78
+ StringBuilder sb = new StringBuilder (String . valueOf(a * b));
79
+ for (int k = 0 ; k < j; ++ k) {
80
+ sb. append(0 );
81
+ }
82
+ t = add(t, sb. toString());
83
+ }
84
+ StringBuilder sb = new StringBuilder (t);
85
+ for (int k = 0 ; k < i; ++ k) {
86
+ sb. append(0 );
87
+ }
88
+ ans = add(ans, sb. toString());
89
+ }
90
+ return ans;
91
+ }
42
92
93
+ private String add (String s1 , String s2 ) {
94
+ int n1 = s1. length(), n2 = s2. length();
95
+ StringBuilder res = new StringBuilder ();
96
+ for (int i = 0 , carry = 0 ; i < Math . max(n1, n2) || carry > 0 ; ++ i) {
97
+ int a = i < n1 ? (s1. charAt(n1 - i - 1 ) - ' 0' ) : 0 ;
98
+ int b = i < n2 ? (s2. charAt(n2 - i - 1 ) - ' 0' ) : 0 ;
99
+ int s = a + b + carry;
100
+ carry = s / 10 ;
101
+ res. append(s % 10 );
102
+ }
103
+ return res. reverse(). toString();
104
+ }
105
+ }
43
106
```
44
107
45
108
### ** TypeScript**
@@ -49,10 +112,10 @@ function multiply(num1: string, num2: string): string {
49
112
if ([num1 , num2 ].includes (' 0' )) return ' 0' ;
50
113
const n1 = num1 .length , n2 = num2 .length ;
51
114
let ans = ' ' ;
52
- for (let i = 0 ; i < n1 ; i ++ ) {
115
+ for (let i = 0 ; i < n1 ; i ++ ) {
53
116
let cur1 = parseInt (num1 .charAt (n1 - i - 1 ), 10 );
54
117
let sum = ' ' ;
55
- for (let j = 0 ; j < n2 ; j ++ ) {
118
+ for (let j = 0 ; j < n2 ; j ++ ) {
56
119
let cur2 = parseInt (num2 .charAt (n2 - j - 1 ), 10 );
57
120
sum = addString (sum , cur1 * cur2 + (' 0' .repeat (j )));
58
121
}
@@ -66,14 +129,14 @@ function addString(s1: string, s2: string): string {
66
129
let ans = [];
67
130
let sum = 0 ;
68
131
for (let i = 0 ; i < n1 || i < n2 || sum > 0 ; i ++ ) {
69
- let num1 = s1 . charAt ( i ) ? parseInt (s1 .charAt (i ), 10 ) : 0 ;
70
- let num2 = s2 . charAt ( i ) ? parseInt (s2 .charAt (i ), 10 ) : 0 ;
132
+ let num1 = i < n1 ? parseInt (s1 .charAt (n1 - i - 1 ), 10 ) : 0 ;
133
+ let num2 = i < n2 ? parseInt (s2 .charAt (n2 - i - 1 ), 10 ) : 0 ;
71
134
sum += (num1 + num2 );
72
135
ans .unshift (sum % 10 );
73
136
sum = Math .floor (sum / 10 );
74
137
}
75
138
return ans .join (' ' );
76
- }
139
+ };
77
140
```
78
141
79
142
### ** ...**
0 commit comments