91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中BigInteger怎么使用

發布時間:2023-03-07 17:26:45 來源:億速云 閱讀:193 作者:iii 欄目:開發技術

這篇文章主要介紹“Java中BigInteger怎么使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java中BigInteger怎么使用”文章能幫助大家解決問題。

在java中經常會遇到比較大的數,甚至超過了long型,那么該如何處理這些“大數據”呢?在java中有兩個類BigInteger和BigDecimal分別表示大整數類和大浮點數類,從原則上是可以表示“天文單位”一樣大的數字咯,但有一個缺點就是比較費內存!

在這里,我們詳細描述下BigInteger的用法,在使用之前,我們需要導入java.math.*包

一.介紹BigInteger經常使用到的一些函數

value.Of(參數); 這個函數的作用是將括號內的參數轉換成指定的數據類型,例如以下例子

                      int A=42;
                     BigInteger f=BigInteger.valueOf(A);
                      System.out.println("f="+f); //輸出的f將會等于BigInteger型的42
                       // 答案: f=42

其實還可以轉成其他的類型,例如以下以下,※※※需要注意的是不重寫的話,jdk1.8 版本是無法支持這種轉換的※※※

                       String s="12345";
                      BigInteger c=BigInteger.valueOf(s);
        //  則c=12345;※※※需要注意的是不重寫的話,jdk1.8 版本是無法支持這種轉換的

add()方法; 這個函數的作用是將大整數加起來,例如以下例子

                       BigInteger c=new BigInteger("6");
                       BigInteger d=new BigInteger("3");
                      System.out.println("c+d="+c.add(d));
                        //答案輸出: c+d=9

③subtract()方法,這個函數的作用是將大整數相減,例如以下例子,運用時前者減后者

                       BigInteger c=new BigInteger("5");
                     BigInteger d=new BigInteger("3");
                      System.out.println("d-c="+d.subtract(c));
                        //答案輸出: d-c=-2

④multiply()方法,這個函數的作用是將大整數相乘,例如以下例子,

                      BigInteger c=new BigInteger("6");
                     BigInteger d=new BigInteger("3");
                    System.out.println("c*d="+c.multiply(d));
                        //答案輸出: c*d=18

⑤divide()方法,這個函數的作用是將大整數做除法,例如以下例子,

                       BigInteger c=new BigInteger("6");
                      BigInteger d=new BigInteger("4");
                     System.out.println("c/d="+c.divide(d));
                        // 答案輸出;c/d=1

⑥remainder()方法,這個函數的作用是將大整數取余

⑦pow(exponent)方法,這個函數的作用是將大整數取exponent的指數,例如a.pow(b)==a^b;

⑧gcd()方法,這個函數的作用是將兩個大整數取最大公約數,例如a.gcd(b);

⑨abs()方法,這個函數的作用是取絕對值,例如

                      BigInteger c=new BigInteger("-9");
                      System.out.println(c.abs());
                        //答案輸出: 9

⑩negate()方法,這個函數的作用是取數的相反數,例如

                      BigInteger c=new BigInteger("9");
                     System.out.println(c.negate());
                        // 答案輸出: -9

?mod()方法; 這個函數的作用是對數進行取余 a.mod(b)=a%b=a.remainder(b);

?max()方法,min()方法,分別是比較兩個數的大小,例如a.max(b); 取a,b中的最大值

?compareTo()方法這個方法是用來比較兩個大整數大小的

 public void testCompare() {
   BigInteger bigNum1 = new BigInteger("52");
   BigInteger bigNum2 = new BigInteger("27");

   //1.compareTo():返回一個int型數據(1 大于; 0 等于; -1 小于)
   int num = bigNum1.compareTo(bigNum2);           //1

   //2.max():直接返回大的那個數,類型為BigInteger
   //  原理:return (compareTo(val) > 0 ? this : val);
   BigInteger compareMax = bigNum1.max(bigNum2);   //52

   //3.min():直接返回小的那個數,類型為BigInteger
   //  原理:return (compareTo(val) < 0 ? this : val);
   BigInteger compareMin = bigNum1.min(bigNum2);   //27
}

?equals()方法,判斷兩個大整數是否相等,例如c.equals(d) 相等就返回 true;

二、介紹BigInteger的讀入方法&mdash;&mdash;nextBigInteger(),從控制臺讀入一個BigInteger型數據,類似于讀入int型的nextInt();

public void test() {
    Scanner s = new Scanner(System.in);             // 讀入
    int n = sc.nextInt();                           // 讀入一個int;
    BigInteger m = sc.nextBigInteger();             // 讀入一個BigInteger;
    while(sc.hasNext()){    
        System.out.print("sc.hasNext()=" + sc.hasNext());
    }
}

三、介紹BigInteger的構造方法

默認的是十進制,也就是我們平常較為常見的,例如

      BigInteger d=new BigInteger("48");
      System.out.println(d);  //答案輸出:48,這里默認的是十進制,但也支持自定義轉換類型

支持自定義進制類型(已存在的),例如二進制,四進制,八進制,十六進制,如下:

public void test() {
   //在構造將函數時,把radix進制的字符串轉化為BigInteger
   String str = "1011100111";
   int radix = 2;  // radix代表二進制,為下一行代碼中的參數radix賦值
   BigInteger interNum1 = new BigInteger(str,radix);   //743
}

四、介紹BigInteger的幾個內部定義的常量&mdash;&mdash;BigInteger.ZERO,BigInteger.ONE,BigInteger.TEN

//之前是支持-1和2,但現在表明已不再輸出(Not exported.)
public void test() {
    //0
    BigInteger zero = BigInteger.ZERO;
    //1
    BigInteger one = BigInteger.ONE;
    //10
    BigInteger ten = BigInteger.TEN;
}

五、介紹BigInteger一些基本類型的轉換

public void testToAnother() {
    BigInteger bigNum = new BigInteger("38");
    int radix = 2;
    
    //1.轉換為bigNum的二進制補碼形式
    byte[] num1 = bigNum.toByteArray();
    //2.轉換為bigNum的十進制字符串形式
    String num2 = bigNum.toString();        //38
    //3.轉換為bigNum的radix進制字符串形式
    String num3 = bigNum.toString(radix);   //100110
    //4.將bigNum轉換為int
    int num4 = bigNum.intValue();
    //5.將bigNum轉換為long
    long num5 = bigNum.longValue();
    //6.將bigNum轉換為float
    float num6 = bigNum.floatValue();
    //7.將bigNum轉換為double
    double num7 = bigNum.doubleValue();
}

六、權限控制

setBit(),testBit():可用于菜單的權限控制,非常好用,原理如下:

//權限控制:setBit(),testBit()
@Test
public void testSetAndTest() {
    //1.封裝數據(setBit的值需 >= 0,否則出現異常:ArithmeticException("Negative bit address"))
    BigInteger permission = new BigInteger("0");
    BigInteger numBig = permission.setBit(2);
    numBig = numBig.setBit(5);
    numBig = numBig.setBit(13);
    numBig = numBig.setBit(66);
    System.out.println("原理:" + numBig); 
    // 原理:73786976294838214692 = 2^2+2^5+2^13+2^66 次方的和;
    // 看!!即使這么大的數也不會溢出,而int最大值只有2147483647;

    //2.取值驗證(返回Boolean型)
    boolean flag1 = numBig.testBit(2);      //true
    boolean flag2 = numBig.testBit(5);      //true
    boolean flag3 = numBig.testBit(13);     //true
    boolean flag4 = numBig.testBit(66);     //true
    boolean flag5 = numBig.testBit(27);     //false
}

setBit():將set進去變量作為二進制數,計算它們的和,并以十進制顯示; testBit():與setBit()相反,驗證this的二進制組成元素中是否包含傳入的變量;

//權限控制源碼分析:
 
//1.setBit()原理:計算this與2的n次方的和
public BigInteger setBit(int n) {
	if (n < 0)
		throw new ArithmeticException("Negative bit address");
 
	int intNum = n >>> 5;
	int[] result = new int[Math.max(intLength(), intNum+2)];
 
	for (int i=0; i < result.length; i++)
		result[result.length-i-1] = getInt(i);
 
	result[result.length-intNum-1] |= (1 << (n & 31));
 
	return valueOf(result);
}
 
//2.testBit()原理:計算this的值中是否包含2的n次方
public boolean testBit(int n) {
	if (n < 0)
		throw new ArithmeticException("Negative bit address");
 
	return (getInt(n >>> 5) & (1 << (n & 31))) != 0;
}

關于“Java中BigInteger怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉义县| 蒙城县| 东丰县| 禹城市| 南充市| 平阴县| 东至县| 博白县| 合江县| 石狮市| 含山县| 和平区| 柞水县| 阿鲁科尔沁旗| 辉南县| 阜城县| 铜川市| 云霄县| 英吉沙县| 济南市| 龙里县| 安西县| 镇赉县| 龙陵县| 余姚市| 英吉沙县| 隆昌县| 祁东县| 苍溪县| 泾源县| 遵义县| 灌南县| 梅河口市| 合山市| 元氏县| 林甸县| 河北区| 淳化县| 南宁市| 瑞金市| 庆城县|