题目描述:

class Solution {
public String multiply(String num1, String num2) {
/*
问题的精华在于,乘积在数组中的位置,下标为i的被乘数,乘以下标为j的乘数,数字总是存在
下标i+j+1的位置上。123*456 中,2*5的结果存在数组的1+1+1 = 3即下标为3的位置。
*/
int n1 = num1.length()-1;
int n2 = num2.length()-1;
if(n1 < 0 || n2 < 0) return "";
int[] mul = new int[n1+n2+2];
for(int i = n1;i>=0;i--){
for(int j = n2; j>=0;j--){
//算进位
mul[i+j] += ((num1.charAt(i)-'0') * (num2.charAt(j)-'0')+mul[i+j+1])/10;
//本位置的值
mul[i+j+1] = ((num1.charAt(i)-'0') * (num2.charAt(j)-'0')+mul[i+j+1])%10;
}
}
StringBuilder sb = new StringBuilder();
int i = 0;
while(i < mul.length-1 && mul[i] == 0)
i++;
for(; i < mul.length; ++i)
sb.append(mul[i]);
return sb.toString();
}
}