0Pricing
Java Academy · บทเรียน

BigInteger สำหรับตัวเลขขนาดใหญ่

จำนวนเต็มความแม่นยำตามต้องการ

BigInteger สำหรับตัวเลขขนาดใหญ่ เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

นอกเหนือจากชนิดจำนวนเต็มขนาดยาว

ชนิดข้อมูลพื้นฐาน long สามารถเก็บค่าได้สูงสุดประมาณ 9.2 ล้านล้านล้าน เมื่อคุณต้องการจำนวนเต็มที่ใหญ่กว่านั้น 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);
    }
}

ควรเลือกใช้เมื่อใด

ใช้ BigInteger กับแฟกทอเรียล ตัวนับที่มีค่ามากมาก คีย์เข้ารหัสลับ และทุกกรณีที่ผลลัพธ์อาจเกินขอบเขตของ long สำหรับการนับทั่วไป ให้ใช้ชนิดข้อมูลพื้นฐานต่อไป เพราะทำงานได้เร็วกว่ามาก

ตรวจสอบอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับ BigInteger

ทบทวน

คุณได้เรียนรู้การใช้ BigInteger:

  • long เกิดค่าล้นอย่างเงียบ ๆ แต่ BigInteger ไม่มีขีดจำกัดตายตัว
  • สร้างจากสตริงหรือใช้ valueOf
  • เป็นออบเจ็กต์ที่ไม่เปลี่ยนรูป จึงต้องเก็บผลลัพธ์ของทุกการดำเนินการ
  • add, multiply, pow และ mod ครอบคลุมการคำนวณทั่วไป
  • ใช้กับแฟกทอเรียล การเข้ารหัสลับ และค่าทุกชนิดที่ใหญ่กว่า long

คำถามที่พบบ่อย

บทเรียน “BigInteger สำหรับตัวเลขขนาดใหญ่” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “BigInteger สำหรับตัวเลขขนาดใหญ่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “BigInteger สำหรับตัวเลขขนาดใหญ่”

จำนวนเต็มความแม่นยำตามต้องการ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “BigInteger สำหรับตัวเลขขนาดใหญ่” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดจึงไม่ใช้ double กับเงิน
  2. การทำงานกับ BigDecimal
  3. การปัดเศษและสเกล
  4. BigInteger สำหรับตัวเลขขนาดใหญ่
← กลับไปที่ Java Academy