大数相乘
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位(如果有进位的话)