Java BigInteger

Java Biginteger



Java เสนอคลาส BigInteger พิเศษสำหรับจัดการตัวเลขจำนวนมากที่มากกว่าตัวเลข 64 บิต ขนาดของค่าจำนวนเต็มที่คลาสนี้สามารถจัดการได้นั้นถูกจำกัดโดยหน่วยความจำที่จัดสรรของ JVM คลาส BigInteger ซึ่งสืบทอด Number.implements อินเทอร์เฟซที่เปรียบเทียบได้ มันให้ค่าเทียบเท่าสำหรับตัวดำเนินการจำนวนเต็มดั้งเดิมของ Java ทุกตัว เช่นเดียวกับทุกเมธอดจากโมดูล java.lang.math ค่าที่เก็บไว้ของอ็อบเจ็กต์ BigInteger ไม่สามารถแก้ไขได้เนื่องจากคลาส BigInteger เปลี่ยนแปลงไม่ได้

ตัวอย่างที่ 1:

โปรแกรมต่อไปนี้มีวิธีสร้าง BigInteger ใน java และใช้การดำเนินการทางคณิตศาสตร์กับค่า BigInteger ที่ให้มา








เราได้นำเข้าคลาส BigInteger จากแพ็คเกจคณิตศาสตร์จาวาภายในโปรแกรม หลังจากนั้น เราประกาศวัตถุ BigInteger “bigInt1” และ “bigInt2” ในเมธอด main() ของคลาส java “BigIntegerExample” ต่อไป เราเริ่มต้นวัตถุ BigInteger ด้วยค่าตัวเลขที่มากภายในคลาส BigInteger เราได้สร้างออบเจกต์อื่นของคลาส BigInteger สำหรับดำเนินการทางคณิตศาสตร์กับค่าจำนวนเต็มขนาดใหญ่ที่ระบุ ออบเจ็กต์ถูกประกาศเป็น 'การคูณ' สำหรับการคูณค่า BinInteger และ 'การหาร' สำหรับการหารค่า BigInteger



จากนั้น เรากำหนด “bigInt1” พร้อมกับวิธีการคูณ () ของ BigInteger ให้กับวัตถุ “คูณ” ซึ่งรับอินพุต “bigInt2” นอกจากนี้ เราได้เรียกเมธอดการหาร () ซึ่งใช้พารามิเตอร์ “bigInt2” ซึ่งจะหารด้วย “bigInt1” และพิมพ์ผลลัพธ์หลังจากดำเนินการ



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





ตัวอย่างที่ 2:

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




เราได้สร้างฟังก์ชัน 'แฟกทอเรียล' ของคลาส BigInteger โดยที่อ็อบเจกต์ 'num' ประเภท int จะถูกส่งผ่านเป็นอาร์กิวเมนต์เพื่อส่งคืนค่าแฟกทอเรียลของค่า 'Num' ภายในฟังก์ชัน 'แฟกทอเรียล' เราได้ประกาศวัตถุ BigInteger 'max_fict' โดยระบุค่า BigInteger เป็น '2' หลังจากนั้น เราปรับใช้ for-loop ซึ่งจะวนซ้ำแล้วคูณค่า “max_fict” ด้วย 4, 5 และจนถึงค่าที่ n เมื่อเรียกใช้เมธอด multiply() การคูณ () นั้นเรียกว่าเมธอด 'valueOf' อีกวิธีหนึ่งโดยที่ออบเจกต์ 'i' ของ for-loop มีให้ คำสั่ง return จะให้แฟกทอเรียลที่ใหญ่กว่า ต่อไป เราได้สร้างเมธอด main() ของโปรแกรมแล้ว เราเริ่มต้นวัตถุ 'Num' ด้วยค่าและพิมพ์แฟกทอเรียลของ 'Num' จากแฟกทอเรียล () วิธีการ

ค่าแฟกทอเรียลของตัวเลข “40” ให้ค่า BigInteger ดังนี้:

ตัวอย่างที่ 3:

ฟังก์ชัน bitCount() ของคลาส BigInteger จะนับจำนวนบิต เมธอด bitCount() แสดงจำนวนบิตที่อยู่ในรูปของการเติมเต็มสองรายการใน BigInteger นี้ และแตกต่างจากบิตเครื่องหมาย วิธีนี้จะคืนค่าชุดบิตเมื่อค่าของ BigInteger เป็นบวก ในทางกลับกัน หากระบุ BigInteger ด้วยค่าลบ วิธีการนี้จะคืนค่าจำนวนบิตรีเซ็ต


เราได้ประกาศตัวแปรสองตัวคือ “b1” และ “b2” ของคลาสประเภท “BigInteger” เรายังกำหนดตัวแปรอีกสองตัวคือ “integer1” และ “integer2” ซึ่งเป็นประเภท int ดั้งเดิม หลังจากการประกาศ เราได้เริ่มต้น 'b1' ด้วยค่า BigInteger ที่เป็นบวก และ 'b2' ด้วยค่า BigInteger ที่เป็นลบ ต่อไป เราได้กำหนด “integer1” และ “integer2” ด้วยเมธอด bitCount() ให้กับตัวแปร BigInteger “b1” และ “b2” บิตที่นับได้จะได้รับจากเมธอด bitCount() สำหรับค่า BigInteger ที่ระบุ

BigInteger ที่เป็นบวกให้บิต '2' และค่าลบของ BigInteger ให้ผลลัพธ์เป็นค่าบิต '1'

ตัวอย่างที่ 4:

ค่าสัมบูรณ์ของข้อมูลตัวเลขขนาดใหญ่ใน BigInteger สามารถกำหนดได้โดยใช้เมธอด abs() ของคลาส BigInteger เมธอด abs() ส่งคืนค่าสัมบูรณ์ของ BigInteger


เรามีคลาส BigInteger ซึ่งเราได้ประกาศตัวแปรสี่ตัว ได้แก่ “big1” “big2” “big3” และ “big4” ตัวแปร “big1” และ “big2” ระบุด้วยค่าบวกและค่าลบตามลำดับ หลังจากนั้น เราเรียกใช้เมธอด abs() โดยมี 'big1' และ 'big2' ในตัวแปร 'big3' และ 'big4' โปรดทราบว่าเมธอด abs() ไม่ใช้ค่าอินพุตใดๆ แต่เรียกด้วยตัวแปร 'big1' และ 'big2' เมธอด abs() รับค่าสัมบูรณ์สำหรับตัวแปร BigInteger เหล่านี้ และผลลัพธ์จะถูกพิมพ์ออกมาในเวลาคอมไพล์

ค่าสัมบูรณ์ของค่าบวก 432 และค่าลบ 432 เท่ากัน เนื่องจากเมธอด abs() คืนค่าค่าสัมบูรณ์เป็นบวกเสมอ

ตัวอย่างที่ 5:

การเปรียบเทียบค่า BigInteger ทำได้โดยใช้เมธอด BigInteger comparisonTo() BigInteger ถูกเปรียบเทียบกับ BigInteger ที่ป้อนเป็นพารามิเตอร์ภายในเมธอด ค่าส่งกลับของวิธีการเปรียบเทียบ () ขึ้นอยู่กับค่า BigInteger เมื่อการเปรียบเทียบค่า BigInteger เท่ากัน ระบบจะส่งกลับค่าศูนย์ มิฉะนั้น ระบบจะส่งคืน '1' และ '-1' โดยมีเงื่อนไขว่าค่า BigInteger มากกว่าหรือน้อยกว่าค่า BigInteger ที่ส่งผ่านเป็นอาร์กิวเมนต์


เรามีการประกาศวัตถุ “MyBigInt1” และ “MyBigtInt2” ของคลาส “BigInteger” จากนั้นวัตถุเหล่านี้จะถูกระบุด้วยค่า BigInteger เดียวกัน หลังจากนั้น เราสร้างออบเจกต์อีกชิ้นหนึ่ง “comparevalue” โดยที่ออบเจ็กต์ “MyBigInt1” ถูกเรียกด้วยเมธอดของ comparisonTo() และอ็อบเจ็กต์ “MyBigInt2” จะถูกส่งผ่านเป็นอาร์กิวเมนต์เพื่อเปรียบเทียบกับออบเจ็กต์ “MyBigInt2” ต่อไป เรามีคำสั่ง if-else ซึ่งเราได้ตรวจสอบว่าผลลัพธ์ของวิธีการ expandTo() เท่ากับค่า '0' หรือไม่

เนื่องจากวัตถุ BigInteger ทั้งสองมีค่าเหมือนกัน ผลลัพธ์ของการเปรียบเทียบถึง() จึงคืนค่าศูนย์ดังที่แสดงในภาพด้านล่าง

ตัวอย่างที่ 6:

นอกจากนี้ยังสามารถใช้เมธอด BigInteger flipBit(ดัชนี) เพื่อพลิกที่ตำแหน่งบิตเฉพาะภายใน BigInteger วิธีนี้ประเมิน (bigInt ^ (1<


เราได้กำหนดตัวแปร BigInteger สองตัวคือ “B_val1” และ “B_val2” ตัวแปร “B_val1” เริ่มต้นด้วยคลาส BigInteger ซึ่งระบุค่าไว้ จากนั้น เราได้ตั้งค่าตัวแปร “B_val2” ด้วยเมธอด flipBit() โดยที่การดำเนินการ flipBit จะดำเนินการกับตัวแปร “B_value” ด้วยค่าดัชนี “2”

ตำแหน่งดัชนีของค่า BigInteger “9” ถูกพลิกกลับด้วยดัชนี “2” ซึ่งจะแสดงผลเป็นค่า “13” ในเอาต์พุต

บทสรุป

คลาส BigInteger ใช้งานได้สะดวกมากและมักใช้ในการเขียนโปรแกรมเชิงแข่งขันเนื่องจากมีคลังวิธีการมากมาย BigInteger ใช้สำหรับการคำนวณตัวเลขที่ยาวมากซึ่งเกินความจุของประเภทข้อมูลดั้งเดิมที่เข้าถึงได้ทั้งหมดในปัจจุบัน มีวิธีการต่าง ๆ สำหรับการดำเนินการทางคณิตศาสตร์แบบโมดูลาร์ เราสร้าง BigInteger ก่อนแล้วจึงกล่าวถึงวิธีการบางอย่าง