Hello World!

……用代码敲开每一个World的大门

大数相加(两个数相加结果大于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();
	}
}
阅读更多
文章标签: string class
个人分类: java基础
上一篇Java数据类型及对应取值范围
下一篇Hibernate框架中如何将多对多映射转化为多对一映射
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭