先写个单数位的乘法,再把所有的结果错位后加起来
/*
@v7fgg
运行时间:224ms超过0.41% 用Java提交的代码
占用内存:19564KB超过3.76%用Java提交的代码
2022年2月12日 12:01
*/
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串 第一个整数
* @param t string字符串 第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
if(s.equals("0")||t.equals("0")){return "0";}
String ans="0";
StringBuilder sb=new StringBuilder(t);
for(int i=0;i<s.length();i++){
char c=s.charAt(s.length()-1-i);
if(i>0){sb.append("0");}
ans=add(ans,multiplyOneDigit(c,sb.toString()));
}
return ans;
}
public String multiplyOneDigit(char c,String s){
if(c=='0'){return "0";}
int k=c-'0';
int carry=0;
StringBuilder ans=new StringBuilder();
for(int i=s.length()-1;i>=0;i--){
int sum=carry+k*(s.charAt(i)-'0');
ans.append(sum%10);
carry=sum/10;
}
if(carry>0){ans.append(carry);}
return ans.reverse().toString();
}
public String add(String s,String t){
if(s.length()<=t.length()){
StringBuilder ans=new StringBuilder();
int carry=0,i=s.length()-1,j=t.length()-1;
while(i>=0){
int sum=s.charAt(i)+t.charAt(j)-2*'0'+carry;
ans.append(sum%10);
carry=sum/10;
i--;
j--;
}
while(j>=0){
int sum=t.charAt(j)-'0'+carry;
ans.append(sum%10);
carry=sum/10;
j--;
}
if(carry==1){ans.append("1");}
return ans.reverse().toString();
}
return add(t,s);
}
}