java BigInteger 類

java之bigInteger

用Java來處理高精度問題,相信對不少ACMer來講都是一件很happy的事,簡單易懂。用Java刷了一些題,感受Java還不錯,在處理高精度和進制轉換中,調用庫函數的來處理。下面是寫的一些Java中一些基本的函數的及其……java

頭文件:import java.io.*;c++

          import java.util.*;算法

          import java.math.*;app

讀入:  Scanner cin = Scanner (System.in);ide

          while(cin.hasNext())//等價於!=EOF函數

          n=cin.nextInt();//讀入一個int型的數測試

          n=cin.nextBigInteger();//讀入一個大整數this

輸出:  System.out.print(n);//打印nspa

          System.out.println();//換行orm

          System.out.printf("%d\n",n);//也能夠相似c++裏的輸出方式

定義:  int i,j,k,a[];

          a = new int[100];

          BigInteger n,m;

          BigDecimal n;

          String s;

數據類型:

數據類型     類型名     位長        取值範圍             默認值

布爾型       boolean      1         true,false           false

字節型       byte         8         -128-127               0

字符型       char        16      ‘\’-\?      ‘\0’

短整型       short       16        -32768-32767            0

整型         int         32  -2147483648,2147483647      0

長整型       long        64      -9.22E18,9.22E18          0

浮點型       float       32      1.4E-45-3.4028E+38       0.0

雙精度型     do le      64  4.9E-324,1.7977E+308       0.0

這裏特別要提出出的兩種類型:

BigInteger 任意大的整數,原則上是,只要你的計算機的內存足夠大,能夠有無限位的

BigInteger 任意大的實數,能夠處理小數精度問題。

BigInteger中一些常見的函數:

A=BigInteger.ONE

B=BigInteger.TEN

C=BigInteger.ZERO

一些常見的數的賦初值。將int型的數賦值給BigInteger,BigInteger.val Of(k);

基本的函數:

valueof: 賦初值

add:+     a.add(b);

subtract:-

multiply:*

divide:/

remainder:this % val

divideAndRemainder:a[0]=this / val; a[1]=this % val

pow:a.pow(b)=a^b

gcd,abs:公約數,絕對值

negate:取負數

signum:符號函數

mod:a.mod(b)=a%b;

shiftLeft:左移,this << n ,this*2^n;

shiftRight:右移,this >> n,this/2^n;

and:等同於c++的&&,且;

or:||,或;

xor:異或,BigInteger xor(BigInteger val),this^val

not:!,非;

bitLength:返回該數的最小二進制補碼錶示的位的個數,即 *不包括* 符號位 (ceil(log2(this <0 ? -this : this + 1)))。對正數來講,這等價於普通二進制表示的位的個數。

bitCount:返回該數的二進制補碼錶示中不包擴符號位在內的位的個數。該方法在 BigIntegers 之上實現位向量風格的集合時頗有用。

isProbablePrime:若是該 BigInteger 多是素數,則返回 tr ;若是它很明確是一個合數,則返回 false 。 參數 certainty 是對調用者願意忍受的不肯定性的度量:若是該數是素數的機率超過了 1 - 1/2**certainty方法,則該方法返回 tr 。執行時間正比於參數肯定性的值。

compareTo:根據該數值是小於、等於、或大於 val 返回 -一、0 或 1;

equals:判斷兩數是否相等,也能夠用compareTo來代替;

min,max:取兩個數的較小、大者;

intValue,longValue,floatValue,doublue:把該數轉換爲該類型的數的值。

 

今天參考課本寫了一個關於二進制與十進制轉換的程序,程序算法不難,但寫完後測試發現不管是二轉十仍是十轉二,對於大於21億即超過整數範圍的數不能很好的轉換。都會變成0.
參考書籍發現使用使用BigInteger能夠解決這個問題。
因而查找了下JDK,而後測試幾回終於寫成功了!
使用心得以下:

1,BigInteger屬於java.math.BigInteger,所以在每次使用前都要import 這個類。偶開始就忘記import了,因而總提示找不到提示符。

2,其構造方法有不少,但如今偶用到的有: BigInteger(String val)
          將 BigInteger 的十進制字符串表示形式轉換爲 BigInteger。
BigInteger(String val, int radix)
          將指定基數的 BigInteger 的字符串表示形式轉換爲 BigInteger。
如要將int型的2轉換爲BigInteger型,要寫爲BigInteger two=new BigInteger("2"); //注意2雙引號不能省略

3,BigInteger類模擬了全部的int型數學操做,如add()==「+」,divide()==「-」等,但注意其內容進行數學運算時不能直接使用數學運算符進行運算,必須使用其內部方法。並且其操做數也必須爲BigInteger型。
如:two.add(2)就是一種錯誤的操做,由於2沒有變爲BigInteger型。

4,當要把計算結果輸出時應該使用.toString方法將其轉換爲10進制的字符串,詳細說明以下:
 String toString()
          返回此 BigInteger 的十進制字符串表示形式。
輸出方法:System.out.print(two.toString());

5,另外說明三個個用到的函數。     BigInteger remainder(BigInteger val)
          返回其值爲 (this % val) 的 BigInteger。
 BigInteger negate()
          返回其值是 (-this) 的 BigInteger。
 int        compareTo(BigInteger val)
          將此 BigInteger 與指定的 BigInteger 進行比較。
remainder用來求餘數。
negate將操做數變爲相反數。
compare的詳解以下:

compareTo p lic int compareTo(BigInteger val)將此 BigInteger 與指定的 BigInteger 進行比較。對於針對六個布爾比較運算符 (<, ==, >, >=, !=, <=) 中的每個運算符的各個方法,優先提供此方法。執行這些比較的建議語句是:(x.compareTo(y) <op> 0),其中 <op> 是六個比較運算符之一。 指定者: 接口 Comparable<BigInteger> 中的 compareTo 參數: val - 將此 BigInteger 與之比較的 BigInteger。 返回:

相關文章
相關標籤/搜索