ACM中java中BigInteger和Decimal用到的主要函式
java中大數以及高精度常用函式
使用java大數類解決問題時我們需要注意兩個方面: 1、不能有包名,也就是說我們要把主類放到預設的包裡,如果你的程式碼裡出現形如package cn.gov.test;這樣的程式碼你很有可能會收穫到RE
2、提交的類的類名必須為Main,如果是其他的名字你有可能收穫到CE也有可能收穫到WA(例如UVA)
Scanner cin=new Scanner(System.in);// 讀入
一.BigInteger
import java.math.BigInteger;
BigInteger.ZERO //大整數0 BigInteger.ONE //大整數1 BigInteger.TEN //大整數10
BigInteger.valueOf(long val)//返回一個BigInteger,其值等於指定long。
public BigInteger(String val) //構造 :講一個字串變為BigIngeter型別的資料 public BigInteger add(BigInteger val) //普通加法 public BigInteger subtract(BigInteger val)//普通減法 public BigInteger multiply(BigInteger val)//普通乘法 public BigInteger divide(BigInteger val)//普通除法 public BigInteger max(BigInteger val)//返回兩個數中的最大值 public BigInteger min(BigInteger val)//返回兩者中的最小值 public BigInteger[] divideAndRemainder(BigInteger val)//除法操作,陣列的第一個元素作為除法的商,第二個元素作為除法的餘數
mod(BigInteger val); //求餘
gcd(BigInteger val); //求最大公約數 (以下都簡寫)
abs();//返回此值的絕對值
and(BigInteger val); //返回 this&val 的BigInteger
andNot(BigInteger val); //返回 this&~val 的BigInteger
bitCount(); //返回BIgInteger的二進位制補碼形式中與符號不同的位的數量
compareTo(BigInteger val); //將this 與val比較,大於,等於,小於分別返回1,0,-1;
doubleValue(); //將此BigInteger轉換為double型返回;
getLowestSetBit();//返回此BigInteger最右端1位元的索引;
hashCode();//返回此BIgInteger的雜湊碼;
isProbablePrime();//判斷是否為素數(true/false);
modInverse(BigInteger m);返回其值為( mod m)的BigInteger;
negate();返回(-this)的BigInteger;
not();// ~this
or(BIgInteger val);// 返回(this | val)
xor(BigInteger val);返回(this^val);
toString(int radix);//返回指定基數的字串形式
shiftRight(int n);//返回(this>>n)的BigInteger
shiftLeft(int n);//返回值為(thsi<<n)的BigInteger
示例:
public class Main{ public static void main(String[] args) { BigInteger bi1 = new BigInteger("123456789") ;// 宣告BigInteger物件 BigInteger bi2 = new BigInteger("987654321") ;// 宣告BigInteger物件 System.out.println("加法操作:" + bi2.add(bi1)) ;// 加法操作 System.out.println("減法操作:" + bi2.subtract(bi1)) ;// 減法操作 System.out.println("乘法操作:" + bi2.multiply(bi1)) ;// 乘法操作 System.out.println("除法操作:" + bi2.divide(bi1)) ; // 除法操作 System.out.println("最大數:" + bi2.max(bi1)) ;// 求出最大數 System.out.println("最小數:" + bi2.min(bi1)) ;// 求出最小數 BigInteger result[] = bi2.divideAndRemainder(bi1) ;//求出餘數的除法操作 System.out.println("商是:" + result[0] + ";餘數是:" + result[1]) ; } }
二.BigDecimal
import java.math.BigDecimal;
public BigDecimal(double val) //構造 將double表示形式轉換為BIgDecimal public BigDecimal(int val)//同上 public BigDecimal(String val)//將字串表示形式轉換為BigDecimal public BigDecimal add(BigDecimal augend)//普通加法 public BigDecimal subtract(BigDecimal subtrahend)//普通減法 public BigDecimal multiply(BigDecimal multiplicand)//普通乘法 public BigDecimal divide(BigDecimal divisor)//普通除法
public BigDecimal pow(int n) //返回大數的n次冪
one.compareTo(two); //在數字上比較大小(大於,等於,小於分別返回1,0 -1);
toString() 將BigDecimal物件的數值轉換成字串。
doubleValue() 將BigDecimal物件中的值以雙精度數返回。
floatValue() 將BigDecimal物件中的值以單精度數返回。
longValue() 將BigDecimal物件中的值以長整數返回。
intValue() 將BigDecimal物件中的值以整數返回。
示例:
public class Main{ public static void main(String[] args) { System.out.println("加法運算:" +MyMath.round(MyMath.add(10.345,3.333),1)) ; System.out.println("減法運算:" +MyMath.round(MyMath.sub(10.345,3.333),3)) ; System.out.println("乘法運算:" +MyMath.round(MyMath.mul(10.345,3.333),4)) ; System.out.println("除法運算:" + MyMath.div(10.345,3.333,3)) ; } }
BigDecimal.setScale()方法用於格式化小數點
setScale(val)表示保留val位小數,預設用四捨五入方式 setScale(val,BigDecimal.ROUND_DOWN)直接刪除多餘的小數位,如2.35會變成2.3 setScale(val,BigDecimal.ROUND_UP)進位處理,2.35變成2.4 setScale(val,BigDecimal.ROUND_HALF_UP)四捨五入,2.35變成2.4
setScaler(val,BigDecimal.ROUND_HALF_DOWN)四捨五入,2.35變成2.3,如果是5則向下舍
setScaler(val,BigDecimal.ROUND_CEILING)接近正無窮大的舍入
setScaler(val,BigDecimal.ROUND_FLOOR)接近負無窮大的舍入,數字>0和ROUND_UP作用一樣,數字<0和ROUND_DOWN作用一樣
setScaler(val,BigDecimal.ROUND_HALF_EVEN)向最接近的數字舍入,如果與兩個相鄰數字的距離相等,則向相鄰的偶數舍入.