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 {
public String multiply(String num1, String num2) {
int len1 = num1.length();
int len2 = num2.length();
int len = len1+len2;
if(num1.equals("0") ||num2.equals("0"))return "0";
int[] res = new int[len];
Arrays.fill(res,0);
for(int i=len2-1;i>=0;i--){
int carry = 0;
for(int j=len1-1;j>=0;j--){
int tmp = ((num2.charAt(i))-'0') * ((num1.charAt(j))-'0') + carry;
carry = tmp/10;
tmp = tmp%10;
res[i+j+1] += tmp;
//处理内部进位
res[i+j] += res[i+j+1]/10;
res[i+j+1] = res[i+j+1]%10;
}
if(carry>0) res[i]+=carry;
}
int begin = 0;
if(res[0] == 0) begin = 1;
StringBuilder sb = new StringBuilder();
for(int i=begin; i<len;i++){
sb.append(res[i]);
}
return sb.toString();
}
}