
大数相乘
class Solution {
    public String multiply(String num1, String num2) {
        String ZERO_STR =  "0";
        String ONE_STR =  "1";
        // 其中一个为0直接返回0
        if(ZERO_STR.equals(num1) || ZERO_STR.equals(num2)){
            return ZERO_STR;
        }
        // 其中一个为1直接返回另一个
        if(ONE_STR.equals(num1)){
            return num2;
        }
        if(ONE_STR.equals(num2)){
            return num1;
        }
/**
乘法,关键2点
1、n位数与m位数相乘,长度不超过m+n位
2、两个数相乘的第一个数的第i位与第二个数的第j为数只会影响
 */
        // 
        int num1Size = num1.length();
        int num2Size = num2.length();
        int[] result = new int[num1Size+num2Size];
        for(int i = num2Size-1; i>=0; i--){
            int num2Tmp = num2.charAt(i)-'0';
            for(int j = num1Size-1; j>=0; j--){
                int num1Tmp = num1.charAt(j)-'0';
                int tmpResult = num2Tmp*num1Tmp;
                result[i+j+1] += tmpResult;
                result[i+j]  += result[i+j+1]/10;
                result[i+j+1] = result[i+j+1]%10;
            }
        }
        StringBuffer res = new StringBuffer(); 
        int index = 0;
        while(index < num1Size+num2Size && result[index] ==0){
                index++;
        }
        for(int i = index; i< num1Size+num2Size;i++){
            res.append(result[i]);
        }
        return res.toString();
    }
}
** 关键**
 1、n位数与m位数相乘,长度不超过m+n位
 2、两个数相乘的第一个数的第i位与第二个数的第j为数只会影响最后结果的i+j+1位和i+j位(如果有进位的话)



















