📜  java 中的数字大于 long - Java (1)

📅  最后修改于: 2023-12-03 15:15:58.582000             🧑  作者: Mango

Java 中的数字大于 long

在 Java 中,long 是一种数据类型,它可以存储范围在 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 之间的整数。如果要存储更大的整数,我们需要使用其他的方法。

BigInteger

BigInteger 类提供了存储和操作任意精度的整数的能力。它可以存储一个任意长度的整数,并支持常见的算术运算和逻辑运算。

import java.math.BigInteger;

BigInteger veryBigNumber = new BigInteger("1234567890123456789012345678901234567890");
BigDecimal

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 类,或自定义类。这些方法都有各自的优点和缺点,开发者需要根据具体的业务需求来选择最合适的方法。