大数加减乘除问题

来源:互联网 发布:淘宝订单清洗 编辑:程序博客网 时间:2024/06/08 09:39


下列代码给出的大数的加减乘代码的java代码,由于大数相除比较复杂,没有给出


/*大数问题(加、减、乘、除)*//*代码中给出了1、两个整数相加;2、两个整数相减;这个两种基本情况 * 其他情况均可以转化成这两种运算; * 比如两个负数相加为2个整数相加加符号 * 整数减负数为2个整数相加 * 负数减整数为两个整数相加加负号 * */import org.junit.Test;public class BigNumberPlus {@Testpublic 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 < bString 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();}}

大数除的一篇blog:http://blog.csdn.net/sunkun2013/article/details/11833515/

1 0
原创粉丝点击