下列代码给出的大数的加减乘代码的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("222221","222221"); String rs = this.mutiMultiply("222221","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--){ 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(); } }
大数除的一篇blog:http://blog.csdn.net/sunkun2013/article/details/11833515/