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

原创 2012年03月26日 16:12:58

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

上文网址: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();
	}
}

相关文章推荐

超大整数相加,超过了long的范围,你要怎么做!

 这个只能够用字符串的形式来处理了,因为计算机能够处理的最大是long型,本文以字符串的形式来进行超大数据的相加,理论上只要你的内存允许,相加多大的数都可以。/** * 超大整数相加: * 题目要求:...

Java问题总结之1-2--超出数据类型取值范围

Java问题总结: 1.超出数据类型取值范围:   数据类型:int   取值范围:-2^31--2^31-1   测试1:    package p1; public class test { ...

Android-调用本地方法计算int数值相加结果显示在界面上/NDK-JNI开发实例(三)

Java调用本地方法计算int数值相加,得出的结果显示在界面上; test1.c // // Created by y_ulongji on 2015/8/31. // #include JNIEX...

两个整型大数相加

/************************************************************************/ /* 大数加法 题目: 求两个100位数以内的...

HDU 1002 A + B Problem II(两个大数相加)

详细题目点击:http://acm.hdu.edu.cn/showproblem.php?pid=1002 Problem Description I have a very simp...

面试题之自创 实现两个整型大数(都是正数)的相加操作

非常大的正整数相加求和 真言 对于得不到的,很羡慕;对于得到的,很不满足。恋爱了,感觉真好,这也是一种动力。just fight for my life,for me,for her,...

两个大数(包括负数)相加

分析: 当这两个大数为正数时,我们可以将字符转化为数字相加,再加进位talg,有进位为1,否则为0; 两个为负数则与正数相似,为一正一负时,我们可以将它们转化为两个正数,用大的减去小的,然后在根据...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大数相加(两个数相加结果大于int能表示的范围时怎么办?)
举报原因:
原因补充:

(最多只允许输入30个字)