给定两个以字符串形式表示的非负整数 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";
if(num1.length()<num2.length())
return multiply(num2,num1);
String result = "0";
for(int i=num2.length()-1,count=0;i>=0;--i,++count){
String s = multi(num1,num2.charAt(i));
for(int k=0;k<count;++k){
s += '0';
}
result = add(result,s);
}
return result;
}
public String add(String one,String two){
StringBuilder stringBuilder = new StringBuilder();
int i = one.length()-1, k = two.length()-1;
int in = 0;
while (i>=0&&k>=0){
int oneVaule = one.charAt(i)-'0';
int twoVaule = two.charAt(k)-'0';
int tmp = oneVaule+twoVaule+in;
stringBuilder.insert(0,(char)((tmp%10)+'0'));
in = tmp/10;
--i;
--k;
}
while (i>=0){
int oneVaule = one.charAt(i)-'0';
int tmp = oneVaule+in;
stringBuilder.insert(0,(char)((tmp%10)+'0'));
in = tmp/10;
--i;
}
while (k>=0){
int twoVaule = two.charAt(k)-'0';
int tmp = twoVaule+in;
stringBuilder.insert(0,(char)((tmp%10)+'0'));
in = tmp/10;
--k;
}
if(in!=0){
stringBuilder.insert(0,in);
}
return stringBuilder.toString();
}
public String multi(String string ,char c){
int k = c - '0';
int in = 0;
StringBuilder stringBuilder = new StringBuilder();
for(int i=string.length()-1;i>=0;--i){
int value = string.charAt(i) - '0';
int tmp = value*k + in;
stringBuilder.insert(0,(char)((tmp%10)+'0'));
in = tmp/10;
}
if(in!=0){
stringBuilder.insert(0,in);
}
return stringBuilder.toString();
}
public String multiply(String num1, String num2) {
if(num1.equals("0")||num2.equals("0"))
return "0";
int[] result = new int[num1.length()+num2.length()];
for(int i=0;i<num1.length();++i){
for(int k=0;k<num2.length();++k){
int one = num1.charAt(i)-'0';
int two = num2.charAt(k)-'0';
int tmp = one*two;
result[i+k+1]+= tmp%10;
result[i+k] += tmp/10;
}
}
for(int i=result.length-1;i>0;--i){
if(result[i]>9){
int tmp = result[i];
result[i] %= 10;
result[i-1]+= tmp/10;
}
}
StringBuilder stringBuilder = new StringBuilder();
int i=0;
while (i<result.length-1){
if(result[i]!=0)
break;
++i;
}
for(;i<result.length;++i){
stringBuilder.append((char)(result[i]+'0'));
}
return stringBuilder.toString();
}