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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงไม่ใช้ double กับเงิน
- การทำงานกับ BigDecimal
- การปัดเศษและสเกล
- BigInteger สำหรับตัวเลขขนาดใหญ่