大数相加(两个数相加结果大于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();
	}
}

两个大数相加,使用字符串模拟相加过程

大数相加不能直接使用基本的int类型,因为int可以表示的整数youx
  • yuzhongchun
  • yuzhongchun
  • 2014年09月28日 19:42
  • 11536

上机题目(中级)- 两个超级大的整数相加相减 (Java)

代码如下:public class AddSub { public static void main(String[] args) { String a="4632864832684683...
  • yayun0516
  • yayun0516
  • 2016年01月18日 12:17
  • 2108

大数运算(一)——超大整数相加

给定两个超大整数,求它们的和,整数的位数为1到1000位
  • u012260238
  • u012260238
  • 2015年09月14日 16:22
  • 276

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

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

两个超大数相加算法

#include #include #include /********************************************************************...
  • woaifen3344
  • woaifen3344
  • 2013年05月29日 11:30
  • 2828

唉,栽在了a+b上,注意两个int型相加可能溢出

小明A+B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su...
  • u014004602
  • u014004602
  • 2014年07月31日 10:30
  • 1091

两个好大的数相加,不能用BigInteger来实现

public static void main(String[] args) ...{        // 两个数相加其中的第一个数        String aStr = "99666666666...
  • huoshen8211
  • huoshen8211
  • 2007年04月29日 15:17
  • 960

java int 乘法溢出问题

今天在看框架的工具包时发现了一个细节, double d=1024d * 1024 * 1024 * 1024; 第一个1024后面为什么要带个d呢? 于是我尝试了一下: do...
  • guliangliang
  • guliangliang
  • 2015年10月10日 09:42
  • 2588

【JS】大整数相加,相乘

首先,对于大整数,是指超过规定类型的整数,它一般的存储类型为字符串类型char。所以大整数的加、乘,实际上就是模拟手工运算。做每一位的运算。 在JS中,需要将字符串中的每一位字符利用parseInt...
  • mine666
  • mine666
  • 2013年04月23日 16:31
  • 1611

javascript大数运算

当数字超过15位相加的时候会出现科学计数法 精度就成了问题 如果还有小数也是 ...
  • xiaobai07
  • xiaobai07
  • 2010年09月04日 13:09
  • 867
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大数相加(两个数相加结果大于int能表示的范围时怎么办?)
举报原因:
原因补充:

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