關于Java大整數(shù)運算之BigInteger類
一、BigInteger類簡單介紹
我們都知道Integer的存儲范圍是-2^31~2^31-1(-2147483648~2147483647),當我們要存儲比Integer更大的數(shù)字時,java中就為我們提供了一個BigInteger類,方便我們去處理更大的數(shù)。
BigInteger 類支持任意精度的整數(shù),也就是說在運算中 BigInteger 類可以準確地表示任何大小的整數(shù)值。首先除了基本的操作加、減、乘、除,在該類中還封裝了其他很有用的操作,接下來將一一介紹。
二、BigInteger構造方式
(1)構造方式
很顯然,BigInteger是一個封裝類,就跟String類是一樣的。使用時需要導入import java.math.BigInteger;使用 BigInteger 類,首先要創(chuàng)建一個 BigInteger 對象。BigInteger是一個有參構造,需要傳入一個參數(shù),最常見的就是給定一個字符串,使用構造方法public BigInteger(String val)構造一個十進制的BigInteger對象。
小貼士:該構造方法可以發(fā)生NumberFormatException異常,當字符串參數(shù)val中如果含有非數(shù)字字符就會發(fā)生該異常。
import java.math.BigInteger;
/*
* BigInteger演示
*/
public class Test {
public static void main(String[] args) {
BigInteger bigInteger=new BigInteger("1123");
}
}(2)輸入方式
普通輸入:
Scanner sc=new Scanner(System.in); BigInteger a=sc.BigIntegerNext();
循環(huán)輸入 :
while (sc.hasNextBigInteger()) { // 注意 while 處理多個 case
}除了定義實例,我們也可以像使用String類那樣使用BigInteger類,給大家一個題目感受一下,該題就是本文開頭所提及的三角形求解。
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
/*
* 三角形
*/
public class Triangle {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNextBigInteger()) { // 注意 while 處理多個 case
BigInteger []triangle=new BigInteger[3];
for(int i=0;i<3;i++) {
triangle[i]=sc.nextBigInteger();
}
Arrays.sort(triangle);
if(triangle[0].add(triangle[1]).compareTo(triangle[2])>0) {
System.out.println("Yes");
}else {
System.out.println("No");
}
}
}
}三、BigInteger常見的成員方法
(1)方法介紹
| 方法名 | 含義 |
| public BigInteger add(BigInteger val) | 返回當前大整數(shù)對象與參數(shù)指定的大整數(shù)對象的和。 |
| public BigInteger subtract(BigInteger val) | 返回當前大整數(shù)對象與參數(shù)指定的大整數(shù)對象的差。 |
| public BigInteger multiply(BigInteger val) | 返回當前大整數(shù)對象與參數(shù)指定的大整數(shù)對象的積。 |
| public BigInteger divide(BigInteger val) | 返回當前大整數(shù)對象與參數(shù)指定的大整數(shù)對象的商。 |
| public BigInteger remainder(BigInteger val) | 返回當前大整數(shù)對象與參數(shù)指定的大整數(shù)對象的余。 |
| public int compareTo(BigInteger val) | 返回當前大整數(shù)對象與參數(shù)指定的大整數(shù)的比較結果, 返回值是1、-1或0,分別表示當前 大整數(shù)對象大于、小于或等于參數(shù)指定的大整數(shù)。 |
| public BigInteger abs() | 返回當前大整數(shù)對象的絕對值。 |
| public BigInteger pow(int a) | 返回當前大整數(shù)對象的a次冪。 |
| public String toString() | 返回當前大整數(shù)對象十進制的字符串表示。 |
| public String toString(int p) | 返回當前大數(shù)對象p進制的字符串表示。 |
(2)方法使用演示
1.加減乘除余
import java.math.BigInteger;
import java.util.Scanner;
/*
* BigInteger演示
*/
public class Test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
BigInteger a=sc.nextBigInteger();
BigInteger b=sc.nextBigInteger();
System.out.println(a.add(b));//加
System.out.println(a.subtract(b));//減
System.out.println(a.multiply(b));//乘
System.out.println(a.divide(b));//除
System.out.println(a.remainder(b));//余
}
}看結果對于超大數(shù)字,也是完美計算結果的。

2.比較
import java.math.BigInteger;
import java.util.Scanner;
/*
* BigInteger演示
*/
public class Test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
BigInteger a=sc.nextBigInteger();
BigInteger b=sc.nextBigInteger();
System.out.println(a.compareTo(b));
}
}a>b返回結果為1。

3.絕對值和冪
import java.math.BigInteger;
import java.util.Scanner;
/*
* BigInteger演示
*/
public class Test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
BigInteger a=sc.nextBigInteger();
BigInteger b=sc.nextBigInteger();
System.out.println(a.abs());
System.out.println(b.pow(100));
}
}
4.轉換成對應進制字符串
import java.math.BigInteger;
import java.util.Scanner;
/*
* BigInteger演示
*/
public class Test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
BigInteger a=sc.nextBigInteger();
BigInteger b=sc.nextBigInteger();
String strTen=a.toString();
String strTwo=b.toString(2);
System.out.println(strTen);
System.out.println(strTwo);
}
}
四、BigInteger不常見的成員方法
上面是我們經(jīng)常會使用的一些常見方法,當然BigInteger中還有許多好用但不常見的方法,現(xiàn)整理分享給大家!
下面的方法都是指二進制
| 方法名 | 含義 |
| public BigInteger shiftLeft?(int n) | 左移一個比特位,*2 |
| public BigInteger shiftRight?(int n) | 右移一個比特位,/2 |
| public BigInteger and?(BigInteger val) | &和 |
| public BigInteger or?(BigInteger val) | |或 |
| public BigInteger xor?(BigInteger val) | ^異或 |
| public BigInteger not() | ~取反 |
| public BigInteger andNot?(BigInteger val) | &~ 先取和再取反 |
| public boolean testBit?(int n) | 從0開始,第n位如果是1,則返回true,否則位false ,必須是正數(shù) |
| public BigInteger setBit?(int n) | 將第n 位置1 |
| public BigInteger clearBit?(int n) | 將第n 位置0 |
| public BigInteger flipBit?(int n) | 如果第n為原來是1,則置0;如果第n為原來是0,則置1; |
| public int getLowestSetBit() | 尋找到第一個不為零數(shù)的 0的個數(shù)。如7->0111,則是4 |
| public int bitLength() | 返回位長,不包含符號位。如7->0111,則是3 |
| public int bitCount() | 補碼表中和符號位不同的個數(shù)。如7->0111,則是3 |
到此這篇關于關于Java大整數(shù)運算之BigInteger類的文章就介紹到這了,更多相關Java大整數(shù)BigInteger類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于Java?SpringBoot的前后端分離信息管理系統(tǒng)的設計和實現(xiàn)
當今社會,人才的流動速度大大增加,因此也對黨建工作的管理層面工作帶來了空前且復雜的挑戰(zhàn),從而使得如何高效的開展管理黨建工作成為了亟待解決的問題。本文將介紹通過Java?SpringBoot實現(xiàn)前后端分離信息管理系統(tǒng),感興趣的同學可以了解一下2021-11-11
SpringCloud GateWay動態(tài)路由用法
網(wǎng)關作為所有項目的入口,不希望重啟,因此動態(tài)路由是必須的,動態(tài)路由主要通過RouteDefinitionRepository接口實現(xiàn),其默認的實現(xiàn)是InMemoryRouteDefinitionRepository,即在內存中存儲路由配置,可基于這個map對象操作,動態(tài)路由的實現(xiàn)方案有兩種2024-10-10
Springboot注解之@EnableAutoConfiguration詳解
這篇文章主要介紹了Springboot注解之@EnableAutoConfiguration詳解,@EnableAutoConfiguration是一個加載Starter目錄包之外的需要Spring自動生成bean對象,本文對其進行總結,需要的朋友可以參考下2023-08-08

