0Pricing
Java Academy · レッスン

巨大な数値のためのBigInteger

任意精度整数を学びます

「巨大な数値のためのBigInteger」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。

longを超えて

プリミティブ型のlongは約922京までの値を保持できます。それより大きな整数が必要な場合、Javaにはjava.mathパッケージのBigIntegerがあり、上限が固定されていません。

longがオーバーフローするとき

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);
    }
}

longから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)));
    }
}

値の比較

2つのBigIntegerの大小を比較するにはcompareToを使用します。負の数、ゼロ、または正の数を返します。

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」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。

「巨大な数値のためのBigInteger」で何を学びますか?

任意精度整数を学びます ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応の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に戻る