原题链接:43.字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”
示例 2:
输入: num1 = “123”, num2 = “456”
输出: “56088”
public class Main {
public static void main(String[] args) {
System.out.println(multiply("9","123"));
}
public static String multiply(String num1, String num2) {
if (num1.equals("0") || num2.equals("0")) {
return "0";
}
String ans="";
int n=num1.length(),m=num2.length();
for (int i=n-1;i>=0;i--){
StringBuilder sb=new StringBuilder();
for (int j=n-1;j>i;j--){
sb.append(0);
}
int y=num1.charAt(i)-'0';
int jw=0;
for (int j=m-1;j>=0;j--){
int x=num2.charAt(j)-'0';
int rs=x*y+jw;
sb.append(rs%10);
jw=rs/10;
}
if (jw!=0){
sb.append(jw%10);
}
ans=addStrings(ans,sb.reverse().toString());
}
return ans;
}
public static String addStrings(String num1, String num2) {
StringBuilder sb=new StringBuilder();
int i=num1.length()-1;
int j=num2.length()-1;
int jw=0;
while (i>=0||j>=0||jw!=0){
int a=i>=0?num1.charAt(i)-'0':0;
int b=j>=0?num2.charAt(j)-'0':0;
sb.append((a+b+jw)%10);
jw=(a+b+jw)/10;
i--;
j--;
}
return sb.reverse().toString();
}
}