下列代码给出的大数的加减乘代码的java代码,由于大数相除比较复杂,没有给出
/*大数问题(加、减、乘、除)*/
/*代码中给出了1、两个整数相加;2、两个整数相减;这个两种基本情况
* 其他情况均可以转化成这两种运算;
* 比如两个负数相加为2个整数相加加符号
* 整数减负数为2个整数相加
* 负数减整数为两个整数相加加负号
* */
import org.junit.Test;
public class BigNumberPlus {
@Test
public void test(){
//String rs = this.plus("0", "000");
//String rs = this.minus("1", "100000");
//String rs = this.singleMultipy("99999999999999999", "9");
//String rs = this.mutiMultiply("111111", "111111");
String rs = this.mutiMultiply("111111", "1000000000000");
System.out.println(rs);
}
/*两个整数相加*/
public String plus(String a,String b){
StringBuffer sb = new StringBuffer();
int carry = 0;
int i,j;
for(i=a.length()-1,j=b.length()-1;i>=0||j>=0;i--,j--){
int ca = i>=0?a.charAt(i)-'0':0;
int cb = j>=0?b.charAt(j)-'0':0;
int cv = (ca+cb+carry)%10;
carry = (ca+cb+carry)/10;
sb.insert(0, (char)(cv+'0'));
}
if(carry==1)
sb.insert(0, 1);
return sb.toString();
}
/*两个整数相减*/
public String minus(String a,String b){
boolean minus_flag = false;
int carry = 0;
StringBuffer sb = new StringBuffer();
/*变成大数减小数*/
if(a.length()<b.length()||(a.length()==b.length()&&(a.compareTo(b)<0))){//a < b
String temp = a;
a = b;
b = temp;
minus_flag = true;
}
for(int i=a.length()-1,j=b.length()-1;i>=0||j>=0;i--,j--){
int ca = i>=0?a.charAt(i)-'0':0;
int cb = j>=0?b.charAt(j)-'0':0;
int cv;
if(ca-cb+carry>=0)
cv = ca-cb+carry;
else{
cv = ca-cb+carry+10;
carry = -1;
}
if(cv!=0)
sb.insert(0, (char)(cv+'0'));
}
if(minus_flag)
sb.insert(0, '-');
return sb.toString();
}
/*多位数与多位数相乘((正数乘以正数))*/
public String mutiMultiply(String a,String b){
String sum = "0";
for(int i = b.length()-1;i>=0;i--){
String tmp = singleMultipy(a,b.substring(i, i+1));
for(int j=i;j<b.length()-1;j++){//tmp末尾要补0(乘以10),才能与上次结果相加
tmp+="0";
}
sum = plus(sum,tmp);
}
return sum.toString();
}
/*一个多位数乘以一个个位数(正数乘以正数)*/
public String singleMultipy(String a,String b){
int carry = 0;
int cb = b.charAt(0)-'0';
StringBuffer sb = new StringBuffer();
for(int i = a.length()-1;i>=0;i--){
int ca = i>=0?a.charAt(i)-'0':0;
int cv = (ca*cb+carry)%10;
carry = (ca*cb+carry)/10;
sb.insert(0, (char)(cv+'0'));
}
if(carry>0)
sb.insert(0, (char)(carry+'0'));
return sb.toString();
}
}