给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
样例描述示例 1: 输入: num1 = "2", num2 = "3" 输出: "6" 示例 2: 输入: num1 = "123", num2 = "456" 输出: "56088"思路
高精度乘法
进位留到最后统一处理,方便代码实现
两个数相乘的结果的放置位置,是所有的数都累加到那个位置,不是覆盖
class Solution {
public String multiply(String num1, String num2) {
int m = num1.length(), n = num2.length();
int a[] = new int[m];
int b[] = new int[n];
//逆序,存入数组
for (int i = m - 1; i >= 0; i -- ) {
a[m - 1 - i] = num1.charAt(i) - '0';
}
for (int i = n - 1; i >= 0; i -- ) {
b[n - 1 - i] = num2.charAt(i) - '0';
}
int res[] = new int[m + n];
for (int i = 0; i < m; i ++ ) {
for (int j = 0; j < n; j ++ ) {
//这里是加等,不是覆盖掉
res[i + j] += a[i] * b[j];
}
}
//最后统一处理进位
for (int i = 0, c = 0; i < m + n || c != 0; i ++ ) {
int s = c + res[i];
res[i] = s % 10;
c = s / 10;
}
//去掉高位多余的0
int k = m + n - 1;
//最高位的0不要去
while (k > 0 && res[k] == 0) k --;
String ret = "";
while (k >= 0) {
//不能少了强制char,不然显示的是ASCII码
ret += (char)(res[k --] + '0');
}
return ret;
}
}



