字符串相乘

 题目描述:

 

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();
    }
}

  

posted @ 2019-03-16 15:13  路在脚下丶  阅读(224)  评论(0编辑  收藏  举报