/**
* 写的有点复杂不过过程还是很清晰的
*
*/
public String multiply(String num1, String num2) {
//为0直接返回
if(num1.equals("0")||num2.equals("0"))
return "0";
char[] chars = num1.toCharArray();
String res="";
for(int i=chars.length-1;i>=0;i--){
//做每一位的程法,最后一个参数代表乘法的结果+几个0
String tmp = multiply(chars[i],num2,chars.length-1-i);
//结果加起来就完事了
res=add(res,tmp);
}
return res;
}
private String add(String res, String tmp) {
if(res.equals(""))
return tmp;
String helper;
if(res.length()>tmp.length()){
helper=tmp;
}else{
helper=res;
res=tmp;
}
//进位
int carry=0;
char[] chars = res.toCharArray();
char[] helperChars = helper.toCharArray();
//每一位相加
for(int i=helper.length()-1,j=res.length()-1;i>=0&&j>=0;i--,j--){
//对位相加,加上进位,刚刚开始进位为0
int sum = Integer.parseInt(chars[j] + "") + Integer.parseInt(helperChars[i] + "") + carry;
//相加后取余就是该位的值
chars[j]= (char) (sum%10+'0');
//进位的值
carry=sum/10;
//这里是对于短的那个数字加完了,进位还有剩的判断
if(i==0){
//用while 是有可能 9+2 还有进位
while(carry>0){
j--;
//这里判断是不是长的数字加好了,要是还有进位就直接插入最前面
if(j>=0){
int sum2 = carry + Integer.parseInt(chars[j] + "");
chars[j]=(char) (sum2%10+'0');
carry=sum2/10;
}else{
return carry+String.copyValueOf(chars);
}
}
}
}
return String.copyValueOf(chars);
}
//乘法比加法害简单不难理解,看看代码就懂了
private String multiply(char aChar, String num2,int zero) {
char[] chars = num2.toCharArray();
Integer a = Integer.valueOf(aChar+"");
StringBuilder sb=new StringBuilder();
int carry=0;
for(int i=chars.length-1;i>=0;i--){
Integer b = Integer.valueOf(chars[i] + "");
int temp = a * b + carry;
carry= temp /10;
sb.insert(0,temp%10);
}
if(carry>0)
sb.insert(0,carry);
while(zero>0){
sb.append("0");
zero--;
}
return sb.toString();
}
43. 字符串相乘
最新推荐文章于 2024-09-16 21:37:07 发布