1. 程式人生 > >Java 大數高精度函式(BigInteger)

Java 大數高精度函式(BigInteger)

Java 提交格式

import .. 標頭檔案 ..

public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        while(cin.hasNext()){   // 等同於 !=EOF
            T = cin.nextInt();
        }
    }
}

標頭檔案:

java.util.Scanner;
java.math.BigInteger;
java.math.BigDecimal;

大數運算時要使用相關的方法而不能使用運算子 如:(+ - * / ..)

BigInteger 大 ——— 整數

BigInteger m = new BigInteger( String );

BigDecimal 大 ——— 浮點數 //不適合於大量的數學運算

BigDecimal m = new BigDecimal( String );

基本函式:

    BigInteger n = new BigInteger( String ); 
    BigInteger m = new BigInteger( String );

    toString(void);                         =>  BigInteger -> String
    n = BigInteger.valueOf(k);              =>  n = k   - - - - - - BigInteger.ZERO/ONE..
    n.add(m);                               =>  n + m
    n.subtract(m);                          =>  n - m
    n.multiply(m);                          =>  n * m
    n.divide(m);                            =>  n / m       整除 
    n.remainder(m); n.mod(m);               =>  n % m
    int[] a = n.divideAndRemainder(m);      =>  a[0] = n / m; a[1] = n % m
    n.pow(m);                               =>  n ^ m       n的m次冪
    n.gcd(m);                               =>  gcd(n,m)
    n.abs();                                =>  abs(n)
    n.negate();                             =>  -n
    n.signum();                             =>  n = 0 return  0
                                                n < 0 return -1
                                                n > 0 return  1
    n.shiftLeft(k);                         =>  n << k      移位運算
    n.shiftRight(k);                        =>  n >> k

    n.isProbablePrime();                    =>  判斷是否為素數 

    n.compareTo(m);                         =>  n < m return -1  比較方法
                                                n > m return  1
                                                n = m return  0
    n.equals(m);                            =>  n == m return 1

    n.min(m);                               =>  return min(n, m)
    n.max(m);                               =>  return max(n, m)
    n.intValue(); n.longValue(); n.floatValue(); n.doubleValue();
                                            =>  change BigInteger to int / long / float / double

    bit_operation:              位運算

    n.and(m);                               =>  n & m       且 
    n.or(m);                                =>  n | m       或 
    n.xor(m);                               =>  n xor m     異或 
    n.not();                                =>  !n          非 
    n.bitLength();                          =>  二進位制位數 (補碼-正數的補碼為其自身)
    n.bitCount();

進位制轉換:

String string = new java.math.BigInteger(String num, int from).toString(int to);