题目:
对于这道题,我是直接从我们自身如何计算多位数*多位数的角度出发的
以123*45为例:
红色的0是我们要补上去的
代码:
class Solution {
public String multiply(String num1, String num2) {
if(num1.equals("0") || num2.equals("0")) return "0";
String res="";
String temp="";
//将num1变为大的数
//num2变为小的数 减少循环次数
if(num1.length()<num2.length()){
temp=num1;
num1=num2;
num2=temp;
}
//开始依次计算
for(int i = num2.length()-1;i>=0;i--){
int carry=0;
StringBuilder str=new StringBuilder();
int n2=num2.charAt(i)-'0';
//补位
for(int j=0;j<num2.length()-1-i;j++){
str.append(0);
}
for(int j=num1.length()-1;j>=0 || carry>0 ;j--){
int n1=j<0 ? 0: num1.charAt(j)-'0';
str.append((n1*n2+carry)%10);
carry=(n1*n2+carry)/10;
}
res=addStrings(str.reverse().toString(),res);
}
return res;
}
//字符串的加法
public String addStrings(String num1, String num2){
StringBuilder res=new StringBuilder();
int carry=0;
for(int i=num1.length()-1,j=num2.length()-1;i>=0 || j>=0 || carry >0;i--,j--){
int a=i<0 ? 0 : num1.charAt(i)-'0';
int b=j<0 ? 0 : num2.charAt(j)-'0';
int temp=(a+b+carry)%10;
res.append(temp);
carry=(a+b+carry)/10;
}
return res.reverse().toString();
}
}