关闭

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

标签: stringclass
1497人阅读 评论(0) 收藏 举报
分类:

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

上文网址: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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1983728次
    • 积分:21043
    • 等级:
    • 排名:第372名
    • 原创:182篇
    • 转载:899篇
    • 译文:2篇
    • 评论:143条
    最新评论