题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/93ada8335ca91c8075ef3d8172d5b373.png)
思路
- 1 <= num1.length, num2.length <= 200,就是说可能会有200位数的相乘,即目前没有数据类型能够存储这些数,故不能转换成数字直接进行相乘。
- 如果是相加的话还挺好做的,记录进不进位,进几位就好了,但相乘的话感觉有点麻烦…
- 煞费苦心写完了,觉得我是个弱智,润去题解看看,感觉题解确实代码比我简洁多了,但也是竖式思想做的。
代码
public String multiply(String num1, String num2) {
if(num1.equals("0") || num2.equals("0")) return "0";
LinkedList<String> ll = new LinkedList<>();
for(int i=num2.length()-1;i>=0;i--){
ll.add(mm(num1,num2.charAt(i)));
}
String ans = calute(ll);
return ans;
}
public String mm(String num1,Character c){
StringBuilder sb = new StringBuilder();
int left = (int)c-'0';
int flag=0;
for(int i=num1.length()-1;i>=0;i--){
Character temp = num1.charAt(i);
int right = (int)temp - '0';
int ans = left*right+flag;
if(i==0){
if(ans>=10){
StringBuilder ans_str = new StringBuilder(String.valueOf(ans));
sb.append(ans_str.reverse().toString());
}else sb.append(ans);
}
else {
if(ans>=10){
flag = ans / 10;
ans = ans % 10;
}else {
flag=0;
}
sb.append(ans);
}
}
return sb.reverse().toString();
}
public String calute(LinkedList<String> ll){
int index=0;
int right = ll.size()-1;
StringBuilder sb = new StringBuilder();
String ans="";
for(int i=ll.size()-1;i>=0;i--){
String temp = ll.get(i);
int left=0;
if(ans.equals("")) left = ll.get(ll.size()-1).length()-temp.length();
else left = ans.length()-temp.length()-right;
for(int j=0;j<left;j++) sb.append("0");
sb.append(temp);
for(int j=0;j<right;j++) sb.append("0");
if(ans=="") ans = sb.toString();
else {
ans = ad(ans,sb.toString());
}
sb.delete(0, sb.length());
right--;
}
return ans;
}
public String ad(String nums1,String nums2){
StringBuilder sb = new StringBuilder();
int flag=0;
for(int i=nums1.length()-1;i>=0;i--){
int left = (int)nums1.charAt(i)-'0';
int right = (int)nums2.charAt(i)-'0';
int ans = left+right+flag;
if(i==0){
if(ans>=10){
StringBuilder ans_str = new StringBuilder(String.valueOf(ans));
sb.append(ans_str.reverse().toString());
}else sb.append(ans);
}
else {
if(ans>=10){
flag = ans / 10;
ans = ans % 10;
}else {
flag=0;
}
sb.append(ans);
}
}
return sb.reverse().toString();
}