1. 程式人生 > >Java解決高精度計算問題

Java解決高精度計算問題

學習參考於這幾個部落格:

http://blog.csdn.net/guo_love_peng/article/details/6634150

http://blog.csdn.net/hqd_acm/article/details/5751686

http://blog.csdn.net/w00w12l/article/details/7290750

自己總結一下:

1.輸入輸出:

先宣告一個 Scanner 型別變數。

Scanner cin=new Scanner(new BufferedInputstream(System.in));

對於各種型別變數: int a,double b,String c,BigInteger d;

a=cin.nextInt();b=cin.nextDouble();c=cin.nextLine();d=cin.nextBigInteger();


輸出 System.out.println() System.out.printf()  等於c++中printf();

2.BigInteger ,BigDecimal

BigInteger 就是高精度整數,常見初始化,

BigInteger a= new  BigInteger("1111111");

BigInteger a=BigInteger.valueOf(111111);

Java進位制轉換也很方便:

BigInteger a=cin.nextBigInteger(2); //高精度數a以二進位制讀入.

如果要將一個大數轉換成其他進位制形式的字串 使用cin.toString(2);//將它轉換成2進製表示的字串常見處理還有:

String st = Integer.toString(num, base); // 把num當做10進位制的數轉成base進位制的st(base <= 35).

int num = Integer.parseInt(st, base); // 把st當做base進位制,轉成10進位制的int(parseInt有兩個引數,第一個為要轉的字串,第二個為說明是什麼進位制).   

BigInter m = new BigInteger(st, base); // st是字串,base是st的進位制.

基本函式

1.valueOf(parament); 將引數轉換為制定的型別

   比如 int a=3;

       BigInteger b=BigInteger.valueOf(a);

     則b=3;

         String s=”12345”;

       BigInteger c=BigInteger.valueOf(s);

       則c=12345;

2.add(); 大整數相加

   BigInteger a=new BigInteger(“23”);

   BigInteger b=new BigInteger(“34”);

a.add(b);

3.subtract(); 相減

4.multiply(); 相乘

5.divide();    相除取整

6.remainder(); 取餘

7.pow();   a.pow(b)=a^b

8.gcd();   最大公約數

9.abs(); 絕對值

10.negate(); 取反數

11.mod(); a.mod(b)=a%b=a.remainder(b);

12.max(); min();

13.punlic int comareTo();

14.boolean equals(); 是否相等

BigDecima 用法也差不多。

補充
       BigDecimal a;  a=a.stripTrailingZeros();//消掉小數a的前導0
         String d=a.toPlainString();  //高精度數a的樸素字串表示,防止出現科學計數法的形式.
       String d;
if(d.charAt(0)=='0') d=d.substring(1); //這裡d.charAt(0)相當於d[0]  的java表示形式.