给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:输入: num1 = "123", num2 = "456"
输出: "56088"
说明:num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
大数乘法,主要要处理好进位问题
public String multiply(String num1, String num2) {
if(num1.equals("0") || num2.equals("0")) return "0";
StringBuilder builder=new StringBuilder("0");
char[] a1=new StringBuilder(num1).reverse().toString().toCharArray();
char[] a2=new StringBuilder(num2).reverse().toString().toCharArray();
for(int i=0;i<a1.length;i++){
int cur=0;
int index=0;
int n1=a1[i]-'0';
while(cur>0 || index<a2.length || (index+i<builder.length() && cur!=0)){
int n2=0;
int n3=0;
if(index<a2.length) n2=a2[index]-'0';
if(index+i<builder.length()) n3=builder.charAt(index+i)-'0';
int ret=n1*n2+cur+n3;
int t=ret%10;
if(index+i<builder.length()) builder.setCharAt(index+i,(char)(t+'0'));
else builder.append((char)(t+'0'));
cur=ret/10;
index++;
}
}
return builder.reverse().toString();
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。