📅  最后修改于: 2023-12-03 15:15:58.582000             🧑  作者: Mango
在 Java 中,long 是一种数据类型,它可以存储范围在 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 之间的整数。如果要存储更大的整数,我们需要使用其他的方法。
BigInteger 类提供了存储和操作任意精度的整数的能力。它可以存储一个任意长度的整数,并支持常见的算术运算和逻辑运算。
import java.math.BigInteger;
BigInteger veryBigNumber = new BigInteger("1234567890123456789012345678901234567890");
BigDecimal 类提供了存储高精度小数的能力。它可以存储任意精度的小数,并支持常见的算术运算,如加、减、乘和除。
import java.math.BigDecimal;
BigDecimal veryBigNumber = new BigDecimal("1234567890.123456789012345678901234567890");
如果以上两种方法都不能满足我们的需求,我们可以自定义一个类来存储更大的数字。我们可以使用数组来存储数字的每一位,并实现常见的算术运算。
public class VeryBigNumber {
private int[] digits;
public VeryBigNumber(String s) {
digits = new int[s.length()];
for (int i = 0; i < s.length(); i++) {
digits[i] = Character.getNumericValue(s.charAt(i));
}
}
// 实现加法运算
public VeryBigNumber add(VeryBigNumber other) {
int carry = 0;
int maxLength = Math.max(digits.length, other.digits.length);
int[] result = new int[maxLength + 1];
for (int i = 0; i < maxLength; i++) {
int digit1 = i < digits.length ? digits[digits.length - 1 - i] : 0;
int digit2 = i < other.digits.length ? other.digits[other.digits.length - 1 - i] : 0;
int sum = digit1 + digit2 + carry;
carry = sum / 10;
result[result.length - 1 - i] = sum % 10;
}
if (carry > 0) {
result[0] = carry;
} else {
int[] trimmedResult = new int[maxLength];
System.arraycopy(result, 1, trimmedResult, 0, maxLength);
result = trimmedResult;
}
return new VeryBigNumber(toString(result));
}
// 将数字转换为字符串
private String toString(int[] digits) {
StringBuilder sb = new StringBuilder();
for (int digit : digits) {
sb.append(digit);
}
return sb.toString();
}
}
以上是自定义类的一个简单实现,可以存储任意长度的整数,并实现了加法运算。
Java 提供了三种方法来处理大于 long 的数字:使用 BigInteger 类、BigDecimal 类,或自定义类。这些方法都有各自的优点和缺点,开发者需要根据具体的业务需求来选择最合适的方法。