大数相加(两个数相加结果大于int能表示的范围时怎么办?)

从上文可以看出,每个数据类型都有其所能表示的范围,超过这个范围就会出一些莫名其妙的错误

上文网址:http://blog.csdn.net/shanliangliuxing/article/details/7394319

比方说两个int型数据相加时就有可能出现这样的错误

package com.autonavi.test;

import java.math.BigInteger;

/**
 * 大数相加
 * @author dashan.yin
 *
 */
public class TestBigIntegerAdd {

	public static void main(String[] args) {
		int int1 = 123456789;
		int int2 = 987654321;
		System.out.println(add(int1, int2));
		String str1 = "11123456789";
		String str2 = "11987654321";
		plus(str1, str2);
		System.out.println(add(str1, str2));
	}

	public static int add(int int1, int int2) { //正常相加,超过范围时得到的结果不正确
		return int1 + int2;
	}

	public static BigInteger plus(String str1, String str2) { //用BigInteger实现大数相加
		BigInteger var1 = new BigInteger(str1);
		BigInteger var2 = new BigInteger(str2);
		BigInteger result = var1.add(var2);

		//输出结果;  
		System.out.println(result);
		return var1.add(var2);
	}

	public static String add(String data1, String data2) { //模拟加法运算,一步一步相加
		int len1 = data1.length();
		int len2 = data2.length();
		int len = len1 > len2 ? len1 : len2; //得到最大长度,方便补齐 
		while (len1++ < len) {
			data1 = "0" + data1;
		}
		while (len2++ < len) {
			data2 = "0" + data2;
		}
		int arr[] = new int[len];
		for (int i = 0; i < len; i++) {
			arr[i] = data1.charAt(i) - '0' + data2.charAt(i) - '0'; //利用字符进行加法运算 
		}
		for (int i = len - 1; i > 0; i--) {
			int jinWei = arr[i] / 10; //进位 
			arr[i] = arr[i] % 10;
			arr[i - 1] = arr[i - 1] + jinWei; //进到前面一位 
		}
		StringBuffer sb = new StringBuffer();
		if (arr[0] >= 10) { //处理第一位情况 
			sb.append(arr[0] / 10);
			sb.append(arr[0] % 10);
		} else {
			sb.append(arr[0]);
		}
		for (int i = 1; i < len; i++) {
			sb.append(arr[i]);
		}
		return sb.toString();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值