题目描述:
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(); } }