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表示形式.