0Pricing
Java Academy · 课时

使用 BigInteger 处理超大数字

任意精度整数

使用 BigInteger 处理超大数字 是 CoddyKit 上的免费 Java Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。

超越长整型

基本类型 long 最多可以存储约 920 京的值。当您需要比这个值更大的整数时,Java 提供了 BigInteger。它来自 java.math 包,并且没有固定的上限。

长整型溢出时

超过 Long.MAX_VALUE 会静默回绕为负数。这种数据损坏是产生典型错误的来源。

public class Main {
    public static void main(String[] args) {
        long max = Long.MAX_VALUE;
        System.out.println(max);
        System.out.println(max + 1);
    }
}

创建 BigInteger

从一串数字创建 BigInteger。它没有长度限制,因此您可以写出远大于任何基本类型所能表示的数字。

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger huge = new BigInteger("123456789012345678901234567890");
        System.out.println(huge);
    }
}

从长整型开始使用 valueOf

如果您的起始值适合 long,BigInteger.valueOf 就是一种方便的工厂方法。

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger n = BigInteger.valueOf(1000000);
        System.out.println(n);
    }
}

不可变算术

与 BigDecimal 一样,BigInteger 也是不可变的。add、subtract 和 multiply 会返回您必须保存的新对象。

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger a = new BigInteger("99999999999999999999");
        BigInteger b = BigInteger.valueOf(1);
        System.out.println(a.add(b));
    }
}

大数乘法

原本会使 long 溢出的乘法,使用 BigInteger 就可以正常工作。

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger a = new BigInteger("10000000000");
        BigInteger b = new BigInteger("10000000000");
        System.out.println(a.multiply(b));
    }
}

计算阶乘

阶乘的增长速度非常快。甚至 30 的阶乘也会使 long 溢出,但 BigInteger 可以轻松处理。

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger result = BigInteger.ONE;
        for (int i = 1; i <= 30; i++) {
            result = result.multiply(BigInteger.valueOf(i));
        }
        System.out.println(result);
    }
}

幂与模运算

pow 将值提升到整数次幂,mod 返回余数。这两者在密码学中都很常见。

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger base = BigInteger.valueOf(2);
        System.out.println(base.pow(64));
        System.out.println(base.pow(10).mod(BigInteger.valueOf(7)));
    }
}

比较数值

请使用 compareTo 对两个 BigInteger 值进行排序。它会返回负数、零或正数。

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger a = new BigInteger("500");
        BigInteger b = new BigInteger("1000");
        System.out.println(a.compareTo(b));
    }
}

实用常量

BigInteger 提供了 ZERO、ONE、TWO 和 TEN。请将它们用作初始累加器或在循环中使用。

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger sum = BigInteger.ZERO;
        sum = sum.add(BigInteger.TEN).add(BigInteger.ONE);
        System.out.println(sum);
    }
}

何时使用它

请在阶乘、超大计数器、密码学密钥以及任何结果可能超过 long 的场景中使用 BigInteger。对于普通计数,请坚持使用基本类型,因为它们快得多。

快速检查

测试您对 BigInteger 的理解。

回顾

您已经学会使用 BigInteger:

  • long 会静默溢出,而 BigInteger 没有固定上限
  • 从字符串或使用 valueOf 创建它
  • 它是不可变的,因此必须保存每次操作的结果
  • add、multiply、pow 和 mod 涵盖了常见数学运算
  • 将它用于阶乘、密码学以及任何大于 long 的值

常见问题解答

「使用 BigInteger 处理超大数字」课时是免费的吗?

是的 — 「使用 BigInteger 处理超大数字」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。

「使用 BigInteger 处理超大数字」这节课中我会学到什么?

任意精度整数 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Java Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「使用 BigInteger 处理超大数字」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Java Academy 课中编写并运行代码吗?

能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么不应使用 double 表示金额
  2. 使用 BigDecimal
  3. 舍入与刻度
  4. 使用 BigInteger 处理超大数字
← 返回 Java Academy