Multiply Strings

     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(); } }
原文地址:https://www.cnblogs.com/RazerLu/p/3533645.html