JAVA实现大数加法

转自:http://to-zoe-yang.iteye.com/blog/1097854


当计算非常大的数的相乘时,使用BigDecimal

便希望能自己实现大数的乘法
因为乘法里要使用加法,就先实现加法了
开始时,大数使用字符串保存
这时候我们需要将大数存储在一个数组里
为了节省空间,我们使用Byte存储每一位

Java代码   收藏代码
  1. public static Byte[] StringToByte(String number){  
  2.     int len = number.length();  
  3.     Byte[] result = new Byte[len];  
  4.     //从高位到低位依次转换,转换后字符串"1234"变为4321,这样方便以后计算  
  5.     for(int i=0; i<number.length(); i++){  
  6.         byte curByte =  Integer.valueOf(number.charAt(i)+"").byteValue();  
  7.         result[len-i-1] = curByte;  
  8.     }  
  9.       
  10.     return result;  
  11. }  
	public static Byte[] StringToByte(String number){
		int len = number.length();
		Byte[] result = new Byte[len];
		//从高位到低位依次转换,转换后字符串"1234"变为4321,这样方便以后计算
		for(int i=0; i<number.length(); i++){
			byte curByte =  Integer.valueOf(number.charAt(i)+"").byteValue();
			result[len-i-1] = curByte;
		}
		
		return result;
	}


加法算法

Java代码   收藏代码
  1. public static Byte[] Add(Byte[] number1, Byte[] number2){  
  2.     int len = (number1.length>number2.length) ? number1.length : number2.length;  
  3.     Byte[] result = new Byte[len+1];  
  4.     Integer sum = new Integer(0);  
  5.     Integer carry = new Integer(0);  
  6.     int i;  
  7.     if(number1.length>number2.length){  
  8.         for(i=0; i<number2.length; i++){  
  9.             sum = number1[i].intValue() + number2[i].intValue();                  
  10.             sum = sum +carry;  
  11.             carry = ((sum -10)>=0) ? 1:0;  
  12.             sum = ((sum -10)>=0) ? (sum-10):sum;  
  13.             result[i] = sum.byteValue();  
  14.             sum = 0;  
  15.         }  
  16.         for(;i<number1.length;i++){  
  17.             sum = sum +carry;  
  18.             carry = ((sum -10)>=0) ? 1:0;  
  19.             sum = ((sum -10)>=0) ? (sum-10):sum;  
  20.             result[i] = sum.byteValue();  
  21.             sum = 0;  
  22.         }  
  23.         if(carry!=0){  
  24.             result[i] = carry.byteValue();  
  25.         }else{  
  26.             result[i] = 0;  
  27.         }  
  28.     }else{  
  29.         for(i=0; i<number1.length; i++){  
  30.             sum = number1[i].intValue() + number2[i].intValue();                  
  31.             sum = sum +carry;  
  32.             carry = ((sum -10)>=0) ? 1:0;  
  33.             sum = ((sum -10)>=0) ? (sum-10):sum;  
  34.             result[i] = sum.byteValue();  
  35.             sum = 0;  
  36.         }  
  37.         for(;i<number2.length;i++){  
  38.             sum = number2[i].intValue() + carry;  
  39.             carry = ((sum -10)>=0) ? 1:0;  
  40.             sum = ((sum -10)>=0) ? (sum-10):sum;  
  41.             result[i] = sum.byteValue();  
  42.             sum = 0;  
  43.         }  
  44.         if(carry!=0){  
  45.             result[i] = carry.byteValue();  
  46.         }else{  
  47.             result[i] = 0;  
  48.         }  
  49.     }  
  50.       
  51.     return result;  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值