这题我写的有点复杂了
public class Solution {
public String multiply(String num1, String num2) {
int len2 = num2.length();
int jinwei=0;
String jia2 = "";
String result = mul(num1,num2.charAt(num2.length()-1));
for (int i=len2-2;i>=0;i--){
jia2 = mul(num1,num2.charAt(i));
for (int j=len2-1;j>i;j--){
jia2=jia2+'0';//这个就是乘法运算的算法。。小学学的
}
result = add(result,jia2);
}
int flag=0;
for (int i=0;i<result.length();i++){
if(result.charAt(i)=='0')flag++;
}
if(flag == result.length())return "0";
return result;
}
private String mul(String num1,char num){//单个数乘以一串数
StringBuffer stringBuffer= new StringBuffer();
int jinwei =0;
int gewei = 0;
int number =0;
int numm = num-'0';
for (int i = num1.length()-1;i>=0;i--){
number = (int) ((num1.charAt(i)-'0')*numm)+jinwei;
jinwei = number/10;//进位
gewei = number - jinwei*10;//相乘之后的各位
stringBuffer.append(gewei);
if (i==0){
if (jinwei!=0)stringBuffer.append(jinwei);
}
}
return stringBuffer.reverse().toString();
}
public String add(String num1,String num2){// String相加如301+10需要倒一下,变成103+01=113;得到的结果在倒一下变成311
int gewei = 0;
StringBuffer stringBuffer1 = new StringBuffer();
StringBuffer stringBuffer2 = new StringBuffer();
StringBuffer stringBuffer = new StringBuffer();
String num11 = stringBuffer1.append(num1).reverse().toString();
String num22 = stringBuffer2.append(num2).reverse().toString();
int len = Math.max(num11.length(),num22.length());
int jinwei = 0;
int sum = 0;
int result = 0;
for (int i=0;i<len;i++){
if (num11.length()<=i){
sum = num22.charAt(i)-'0'+jinwei;
}else if(num2.length()<=i){
sum = num11.charAt(i)-'0'+jinwei;
}else {
sum = num11.charAt(i) -'0' + num22.charAt(i) -'0' + jinwei;
}
jinwei = sum/10;
gewei = sum - jinwei*10;
stringBuffer.append(gewei);
if (i==len-1){
if (jinwei!=0)stringBuffer.append(jinwei);
}
}
return stringBuffer.reverse().toString();
}
}
再贴一个看到的比较简单的做法,得学习学习
public String multiply(String left, String right) {
if(left.equals("0") || right.equals("0"))
return "0";
// use p to accumulate sum of prod.
int[] p = new int[left.length() + right.length()] ;
left = new StringBuilder(left).reverse().toString();
right = new StringBuilder(right).reverse().toString();
for(int i =0; i < left.length(); i ++){
for(int j =0; j < right.length(); j ++){
int val = (left.charAt(i) -'0') * (right.charAt(j) -'0');
p[i+j] += val;
}
}
// convet p into string
int carry =0;
StringBuilder sb = new StringBuilder();
for(int v: p){
v += carry;
carry = v/10;
v %= 10;
sb.append(v);
}
if(carry > 0 )
throw new RuntimeException("wrong code");
String ret = sb.reverse().toString();
return ret.charAt(0) == '0' ? ret.substring(1) : ret;
}