123
* 45
615
+ 492
= 5535
public class Solution { public String multiply(String num1, String num2) { int l1 = num1.length(); int l2 = num2.length(); int[] num = new int[l1 + l2 + 1]; for(int i = 0; i <= l2 - 1; i ++){ int carry = 0; int a = num2.charAt(l2 - 1 - i) - '0'; for(int j = 0; j <= l1 - 1; j ++){ int b = num1.charAt(l1 - 1 - j) - '0'; //这里的 num[i+j] 是因为下面的 num[i + l1] = carry;也就是 num2的 //第一位成完的后的num1最高位又向前进了一位, 注意还要把之前的进位加上 num[i + j] =num[i+j]+ a * b + carry; carry = num[i + j] / 10; num[i + j] = num[i + j] % 10; } // 123*9 carry add to the left side of digit '1' num[i + l1] = carry; } // 100 * 1 = 00100 把00100 转换为 100。 int i = num.length -1;
// 这里 i>0, 因为 ) 0*0=0 还要保留最后一位0 while( i > 0 && num[i] == 0){ i--; } StringBuilder sb = new StringBuilder(); // 得到的num数组是低位在前 这又把数组倒过来。 这里是“>=”号, 因为 0*0 = 0, 要取到最后一位0。 while(i >= 0){ sb.append(num[i--]); } return sb.toString(); } }