BigInteger 和 BigDecimal分別表示大整數類和大浮點數類。
這兩個類都在java.math.*包中,因此每次必須在開頭處引用該包
一、大數的基本運算:以整數爲例實現 BigInteger
1.)輸入:
BigInteger a = in.nextBigInteger();
或者:BigInteger b = new BigInteger(in.next());
2.)兩個大數相加: a.add(b);
3.) 兩個大數相減: a.subtract(b);
4.) 相乘: a.multiply(b);
5.)相除取整 a.divide(b)
6.)取餘,兩種表示 a.mod(b) = a%b = a.remainder(b)
7.)冪運算a^c a.pow(c);//c爲Int整數
8.)a,b的最大公約數 a.gcd(b)
9.)一個數的絕對值 a.abs()
10.)取反數 a.negate()
11.)最大max最小min 兩者取大小 a.max(b) a.min(b)
12.)判斷大小 a.compareTo(b) :如果a == b 輸出0;如果a < b 輸出-1;如果a > b輸出1。(int型)
13.)判斷是否相等 :a.equals(b) 如果相等輸出true , 否則輸出false(Boolean類型)
14.)//常量,可以初始化用
System.out.println(BigInteger.ONE); //1
System.out.println(BigInteger.ZERO); //0
System.out.println(BigInteger.TEN); //10
15.)將大數轉換成不同的進制數:,toString(p); //沒有P默認爲十進制,否則自定義
//返回大整數十進制的字符串表示,十進制也可以用下面的表示即p = 10,
System.out.println(a.toString()); //結果是字符串
System.out.println(b.toString()); //結果是字符串
//返回大整數p進制的字符串表示
int p = 10;
System.out.println(a.toString(p)); //結果是字符串
System.out.println(b.toString(p)); //結果是字符串
16.)//將別的類型的數轉換成大數。(某些問題可能會用到大數,但是一開始並不是大數,這時就需要轉化。比如:例題SDUT3899)
// int型或者long型用BigInteger.valueOf(k),浮點型用BigDecimal.valueOf(k)
//浮點型轉化
double k = 13.156;
System.out.println(BigDecimal.valueOf(k));
//整型轉換成大數
int c = in.nextInt();
System.out.println(BigInteger.valueOf(c));
//長整型轉換c成大數
long l = 213513L;
System.out.println(BigInteger.valueOf(l));
17.)//將BigInteger類型轉換成別的類型:
//doubleValue() ,將此 BigInteger 轉換爲 double
System.out.println(a.doubleValue());
System.out.println(b.doubleValue());
//intValue() ,將此 BigInteger 轉換爲 int
System.out.println(a.intValue());
System.out.println(b.intValue());
//floatValue(),將BigInteger轉換爲float型
System.out.println(a.floatValue());
System.out.println(b.floatValue());
//longValue(),將BigInteger轉換爲long型
System.out.println(a.longValue());
System.out.println(b.longValue());
18.)//nextProbablePrime() ; 返回大於此BigInteger的可能爲素數的第一個整數。
System.out.println(a.nextProbablePrime());
System.out.println(b.nextProbablePrime());
二、 浮點數處理問題:
1)輸出原始結果(自己計算得出的結果):
BigDecimal result;
兩種方法:
法一:System.out.println(result); //直接輸出
法二:System.out.println(result.toString()); //
這兩種結果是一樣的,大部分使用第二個。但是,toString()方法輸出的字符串並不能保證不是科學計數法。不過在日常的使用中,用toString()方法輸出的就是普通的數字字符串而非科學計數法。
舉個例子:
System.out.println(new BigDecimal("100.000"));
結果爲:100.000
System.out.println(new BigDecimal("0000.14541"));
結果爲:0.14541
如果想要把浮點數末尾的0去掉,那麼就用下面的方法。
2)處理浮點數時去掉末尾的0:
一種方法:用.stripTrailingZeros().toString();
System.out.println( new BigDecimal("100.000").stripTrailingZeros().toString());
但是這種方法會表示成科學計數法的形式,上面的結果爲:1E+2。而我們不希望要這樣的結果,而是直接輸出100,那麼要怎麼做呢?
解決的方法很簡單,如果想要避免輸出科學計數法的字符串,我們要用toPlainString()函數代替toString()。後面多餘的0都會刪掉。
如:
System.out.println( new BigDecimal("100.000").stripTrailingZeros().toPlainString());
結果爲:100
在上面的所有方法中如果帶有String結果都是字符串類型的,
.toString()
.stripTrailingZeros().toString()
.stripTrailingZeros().toPlainString()
如果要將結果賦值給一個新的變量,那一定是String類型的字符串。
3)去掉開頭的0,開頭只有一個0;
String s = result.stripTrailingZeros().toPlainString();
if(s.startsWith("0")) //去掉首位的0
s = s.substring(1); //減掉一位
s.subString();的用法是對字符串進行的操作;
舉例:
String s = "123456";
String s1 = s.substring(3); //在原字符串的基礎上減掉三位
System.out.println("s1= " + s1); //結果爲:s1 = 456
* 如果前面有多個0,輸出的時候只輸出一個。
* 而後面有多個0:
* 用.toString();會輸出帶0的,在位數限制內(超過多少位會變成科學計數法吧???)。
* 用.stripTrailingZeros().toString();會輸出科學技術法表示的數也是在某個範圍之外,與toString()一樣
* 用.stripTrailingZeros().toPlainString();會將末尾的多餘的0去掉