添加两个非常大的数字

时间:2011-12-08 06:13:45

标签: java

  

可能重复:
  How to add two numbers of any length in java?

任何人都可以帮我这个吗?

我需要做的是添加一个计算器不能容纳的非常大的数字。

这是我的代码虽然它只能保存一个数字,直到2147483647 ..任何数字高于我得到错误消息说明“整数太大”

任何人都可以告诉我如何使用更大的数字?

import java.math.BigDecimal;

public class AddTwoBigNumbers{
  public static void main() {
  BigDecimal num1, num2;
  num1 = new BigDecimal(2147483647);
  num2 = new BigDecimal(2147483647);
  Sum(num1, num2);
  }

  public static void Sum(BigDecimal val1, BigDecimal val2){
  BigDecimal sum = val1.add(val2);
  System.out.println("Sum of two BigDecimal numbers: "+ sum);
  }
}

7 个答案:

答案 0 :(得分:5)

听起来好像要使用BigInteger


[edit] 要将大于Integer.MAX_VALUE的数字传递给构造函数,请使用long

new BigInteger(9876543210L)

如果你需要一个大于long的数字,你需要找到一些构造它的方法(比如把它作为一个字符串传递,或者乘以两个BigInteger s)

答案 1 :(得分:1)

构造BigDecimal时,您正在使用整数。在Java中,整数只能容纳2 ^ 31,因此当你以这种方式构造BigDecimal时,这就是它所允许的全部内容。如果你给它一个更大的int,编译器会抱怨。

解决此问题的方法是传入您的号码的字符串表示。

num1 = new BigDecimal("123123123123123123123123");

答案 2 :(得分:0)

num1 = new BigDecimal( 2147483648l ); num2 = new BigDecimal( 2147483649l );

BigDecimal构造函数支持long / double作为参数,使用其中之一。

答案 3 :(得分:0)

数字总是被解释为整数。如果您希望将数字编译为long,则应为其添加后缀“L”,因此它将为2147483647333L。如果数字大于MAX_LONG(~2 ^ 31),您应该使用this constructor将其作为字节数组提供,并使用数字的字符串表示形式(“1234.56”)。

答案 4 :(得分:0)

您是否在询问如何使用更大的数字创建BigDecimal(或BigInteger)?如果是这样,首先应该为您的数字字面添加L - 这使其成为long而不是int。如果这还不够大,你也可以通过传递一个String数字表示来创建新的BigDecimals / BigIntegers。

答案 5 :(得分:0)

您应该使用接受值为的构造函数,否则您将受到所使用数据类型大小的限制,以避免使用BigXXXX类。

答案 6 :(得分:0)

BigDecimal在构造函数中需要很长时间。但是你最后需要一个L。

新的BigDecimal(2147483648L)应该有效。