大数加减乘除问题
来源:互联网 发布:淘宝订单清洗 编辑:程序博客网 时间: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();}}
1 0
- 大数问题之加减乘除
- 大数加减乘除问题
- 大数加减乘除
- 大数加减乘除
- 大数加减乘除
- 大数加减乘除
- 大数加减乘除
- 大数(加减乘除)
- 大数加减乘除?
- 大数的加减乘除
- 大数的加减乘除
- 大数加减乘除求根源码
- c++ 大数的加减乘除
- java大数加减乘除
- 大数加减乘除取余
- 大数加减乘除幂模版
- 大数运算(加减乘除)
- 大数的加减乘除
- C++中虚函数的继承
- 【Linux系统编程】特殊进程之僵尸进程
- JDBC-连接oracle和MySql数据库的基类
- 大数据_Storm_Storm的一些基本指令
- Python Web 框架,第 1 部分: 使用 Django 和 Python 开发 Web 站点
- 大数加减乘除问题
- 【Linux系统编程】特殊进程之孤儿进程
- 6、INSERT INTO 语句
- 数据库恢复工具:DUL、ODU和AUL
- 一个基础的EJB接口
- 配置opencv
- Android代码内存优化建议-OnTrimMemory优化
- 从零开始学Android(九)
- hadoop hive 的使用心得