大整数相乘

 

 思路:先每位相乘,之后统一%10进位

例子:123*456

4   5   6

     8   10   12

           12  15  18

---------------------------------

4 (13) (28) (27)(18)

统一进位:

5  6     0     8       8

最终结果:56088

class Solution {
    public String multiply(String num1, String num2) {
        int num1Len = num1.length(),num2Len = num2.length();
        int[] res = new int[num1Len+num2Len];//辅助空间
        int resSize = num2Len+num1Len-2;
        for(int i=0;i<num1Len;i++){
            for(int j=0;j<num2Len;j++){
                //这里i+j相等就是在竖式一列
                res[i+j] += (num1.charAt(i) - '0')*(num2.charAt(j) - '0');
            }
        }
        for(int i=resSize;i>=1;i--){//进位
             int tmp = res[i];
             res[i] = res[i] % 10;
             res[i-1] += tmp / 10;
        }
        if(res[0] == 0) return "0";//判断乘的结果是否是0
        StringBuilder ans = new StringBuilder("");
        for(int i=0;i<=resSize;i++){
            ans.append(res[i]);
        }
        return ans.toString();
    }
}    

 

posted @ 2019-05-17 23:00  浅滩浅  阅读(136)  评论(0)    收藏  举报