Java大數有關的知識

大數:
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去掉



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章