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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:27   2173   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 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP