思路: 先将字符串模拟相乘,再将字符串相加
注意:
● 取余和做商都要将进位数带上,结束运算后进位数不为0还需添加上
● 做加法时,对于位数不同的情况,无需管越界的下标,只需将被加数置为0即可
● 对于每个由相乘得到的数,需进行补0处理
class Solution {
public String multiply(String num1, String num2) {
if(num1.equals("0")||num2.equals("0")) return "0";
List<String> list=new LinkedList<String>();
for(int i=num2.length()-1;i>=0;i--){
// 逐位相乘
int t1=num2.charAt(i)-48,temp=0,pow=0;
StringBuffer str=new StringBuffer();
for(int j=num1.length()-1;j>=0;j--){
int t2=num1.charAt(j)-48;
temp=((t1*t2)+pow)%10;
pow=((t1*t2)+pow)/10;
str.append(temp+"");
}
if(pow>0) str.append(pow+"");
String str2=str.reverse().toString();//相乘后的字符串
list.add(str2);
}
// 将全部list中的字符串相加
String ans=list.get(0);
for(int i=1;i<list.size();i++){
int t=i;
String temp1=list.get(i);
while(t>0) {
temp1+="0";
t--;
}
int j=temp1.length()-1,k=ans.length()-1,temp=0,pow=0;
StringBuffer str=new StringBuffer();
while(j>=0||k>=0){
int t1=j<0 ? 0:temp1.charAt(j)-48;
int t2=k<0 ? 0:ans.charAt(k)-48;
temp=(t1+t2+pow)%10;
pow=(t1+t2+pow)/10;
str.append(temp);
j--;
k--;
}
ans=str.reverse().toString();//相加后的字符串
}
return ans;
}
}