Java BigInteger

Java Biginteger



Java cung cấp một lớp BigInteger đặc biệt để quản lý các số cực lớn lớn hơn số 64-bit. Kích thước của các giá trị số nguyên mà lớp này có thể xử lý chỉ bị hạn chế bởi bộ nhớ được cấp phát của JVM. Lớp BigInteger kế thừa Number. Thực thi giao diện So sánh được. Nó cung cấp các giá trị tương đương cho mọi toán tử số nguyên nguyên thủy Java cũng như mọi phương thức từ mô-đun java.lang.math. Không thể sửa đổi giá trị được lưu trữ của đối tượng BigInteger do tính bất biến của lớp BigInteger.

Ví dụ 1:

Chương trình sau đây cung cấp cách tạo BigInteger trong java và áp dụng phép toán số học cho giá trị BigInteger được cung cấp.








Chúng tôi đã nhập lớp BigInteger từ gói java math bên trong chương trình. Sau đó, chúng ta đã khai báo các đối tượng BigInteger “bigInt1” và “bigInt2” trong phương thức main() của lớp java “BigIntegerExample”. Tiếp theo, chúng tôi đã khởi tạo các đối tượng BigInteger với các giá trị số lớn trong lớp BigInteger. Chúng tôi đã tạo một đối tượng khác của lớp BigInteger để thực hiện phép toán số học trên giá trị số nguyên lớn đã chỉ định. Các đối tượng được khai báo là “Phép nhân” để nhân giá trị BinInteger và “Phép chia” để chia giá trị BigInteger.



Sau đó, chúng tôi đã gán “bigInt1” cùng với phương thức multi() của BigInteger cho đối tượng “multiply”, lấy đầu vào là “bigInt2”. Ngoài ra, chúng tôi đã gọi phương thức chia(), lấy tham số “bigInt2” sẽ được chia cho “bigInt1” và in kết quả sau khi thực hiện.



Kết quả phép toán nhân và chia trên các giá trị BigInteger được hiển thị trong hình ảnh đầu ra sau đây. Đây là cách BigInteger được cấu hình trong java và được sử dụng cho các hoạt động khác nhau.





Ví dụ 2:

Tính toán giai thừa là một minh họa tốt về một số nguyên nhận được đầu vào rất lớn. BigInteger cũng có thể được sử dụng để lấy giai thừa cho các giá trị số nguyên lớn hơn.




Chúng ta đã tạo hàm “giai thừa” của lớp BigInteger, trong đó đối tượng “num” của kiểu int được truyền dưới dạng đối số để trả về giai thừa của giá trị “Num”. Bên trong hàm “giai thừa”, chúng ta đã khai báo một đối tượng BigInteger “max_fict” trong đó giá trị BigInteger “2” được chỉ định. Sau đó, chúng tôi đã triển khai vòng lặp for, vòng lặp này sẽ lặp lại rồi nhân giá trị “max_fict” với 4, 5 và lên đến giá trị thứ n khi phương thức multi() được gọi. Bản thân multi() được gọi là một phương thức “valueOf” khác, trong đó đối tượng “i” của vòng lặp for được cung cấp. Câu lệnh return sẽ cung cấp giai thừa lớn hơn. Tiếp theo, chúng ta đã thiết lập phương thức main() của chương trình. Chúng tôi đã khởi tạo đối tượng “Num” với giá trị và in giai thừa của “Num” từ phương thức giai thừa().

Giá trị giai thừa của số “40” cung cấp giá trị BigInteger như sau:

Ví dụ 3:

Hàm bitCount() của lớp BigInteger đếm các bit. Phương thức bitCount() cung cấp số bit ở dạng hai phần bù trong BigInteger này và khác với bit dấu. Phương thức này trả về các bit đã đặt khi giá trị của BigInteger là dương. Mặt khác, nếu BigInteger được chỉ định với giá trị âm, phương thức này sẽ trả về số bit đặt lại.


Chúng tôi đã khai báo hai biến, “b1” và “b2” thuộc loại “BigInteger”. Chúng tôi cũng đã xác định thêm hai biến, “số nguyên1” và “số nguyên2,” kiểu nguyên thủy. Sau khi khai báo, chúng tôi đã khởi tạo “b1” với giá trị BigInteger dương và “b2” với giá trị BigInteger âm. Tiếp theo, chúng ta đã gán “số nguyên 1” và “số nguyên 2” bằng phương thức bitCount() cho các biến BigInteger “b1” và “b2”. Các bit được đếm sẽ được lấy từ phương thức bitCount() cho các giá trị BigInteger đã chỉ định.

BigInteger dương cung cấp các bit “2” và giá trị âm của BigInteger xuất ra giá trị bit “1”.

Ví dụ 4:

Giá trị tuyệt đối của dữ liệu số kích thước lớn trong BigInteger có thể được xác định bằng cách sử dụng phương thức abs() của lớp BigInteger. Phương thức abs() trả về giá trị tuyệt đối của BigInteger.


Chúng ta có một lớp BigInteger, từ đó chúng ta đã khai báo bốn biến: “big1,” “big2,” “big3,” và “big4”. Các biến “big1” và “big2” được chỉ định với các giá trị dương và âm tương ứng. Sau đó, chúng ta gọi phương thức abs() với “big1” và “big2” trong các biến “big3” và “big4”. Lưu ý rằng phương thức abs() không nhận bất kỳ giá trị đầu vào nào nhưng được gọi với các biến “big1” và “big2”. Phương thức abs() nhận giá trị tuyệt đối cho các biến BigInteger này và kết quả sẽ được in vào thời điểm biên dịch.

Giá trị tuyệt đối của giá trị dương 432 và âm 432 là như nhau vì phương thức abs() luôn trả về giá trị tuyệt đối dương.

Ví dụ 5:

Việc so sánh các giá trị BigInteger có thể đạt được bằng cách sử dụng phương thức BigInteger compareTo(). BigInteger được so sánh với BigInteger được nhập dưới dạng tham số bên trong phương thức compareTo(). Giá trị trả về của phương thức so sánh () dựa trên các giá trị BigInteger. Khi so sánh giá trị BigInteger bằng nhau, thì giá trị 0 được trả về. Mặt khác, “1” và “-1” được trả về với điều kiện giá trị BigInteger lớn hơn hoặc nhỏ hơn giá trị BigInteger được truyền dưới dạng đối số.


Chúng tôi có các đối tượng khai báo “MyBigInt1” và “MyBigtInt2” của lớp “BigInteger”. Sau đó, các đối tượng này được chỉ định với cùng các giá trị BigInteger. Sau đó, chúng tôi đã tạo một đối tượng khác, “so sánh giá trị”, trong đó đối tượng “MyBigInt1” được gọi bằng phương thức compareTo() và đối tượng “MyBigInt2” được chuyển làm đối số để so sánh với đối tượng “MyBigInt2”. Tiếp theo, chúng ta có câu lệnh if-else để kiểm tra xem kết quả của phương thức so sánh () có bằng giá trị “0” hay không.

Vì cả hai đối tượng BigInteger đều có cùng giá trị nên kết quả so sánh() trả về 0, như thể hiện trong hình ảnh bên dưới.

Ví dụ 6:

Phương thức BigInteger flipBit(index) cũng có thể được sử dụng để lật tại một vị trí bit cụ thể trong BigInteger. Phương pháp này đánh giá (bigInt ^ (1<


Chúng tôi đã xác định hai biến BigInteger, “B_val1” và “B_val2.” Biến “B_val1” được khởi tạo với lớp BigInteger, nơi giá trị được chỉ định. Sau đó, chúng tôi đã đặt biến “B_val2” bằng phương thức flipBit(), trong đó thao tác flipBit được thực hiện trên biến “B_value” với giá trị chỉ mục “2”.

Vị trí chỉ mục của giá trị BigInteger “9” được đảo ngược với chỉ mục “2”, cho ra giá trị “13” ở đầu ra.

Sự kết luận

Lớp BigInteger rất thuận tiện để sử dụng và thường được sử dụng trong lập trình cạnh tranh do thư viện phương thức rộng lớn của nó. BigInteger được sử dụng để tính toán các số rất dài vượt quá khả năng của tất cả các loại dữ liệu nguyên thủy hiện có thể truy cập được. Nó cung cấp các phương pháp khác nhau cho các hoạt động số học mô-đun. Trước tiên, chúng tôi đã tạo BigInteger và sau đó trình bày một số phương thức của nó.