给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3" 输出: "6"
示例 2:
输入: num1 = "123", num2 = "456" 输出: "56088"
思路:模拟竖乘:先初始化res数组,他的长度不会超过两个数的长度之和,初始化为0。乘法分割成num2的个位、十位
、百位...分别乘num1的各个位,同时记录加法、乘法的进位,边乘边加。
public static String multiply(String num1, String num2) {
int len1 = num1.length();
int len2 = num2.length();
int[] res = new int[len1 + len2];
int add = 0, mul = 0, i = 0,j = 0;
for (i = len1 - 1; i >= 0; i--) {
add = 0;
mul = 0;
for (j = len2 - 1; j >= 0 ; j--) {
int tmp = getNum(num1, i) * getNum(num2, j);
int oldBit = res[i + j + 1];
res[i + j + 1] = (tmp % 10 + oldBit + add + mul) % 10;
add = (tmp % 10 + oldBit + add + mul) / 10;
mul = tmp / 10;
}
res[i + j + 1] = add + mul;
}
StringBuffer sb = new StringBuffer();
boolean flag = true;
for (int bit: res){
if(flag && bit == 0)
continue;
flag =false;
sb.append(bit);
}
return sb.toString().equals("") ? "0": sb.toString();
}
public static int getNum(String num, int index){
return num.charAt(index) - '0';
}