头文件:
import java.io.*;
import java.util.*;
import java.math.*;
BigInteger属于java.math.BigInteger
读入:
Scanner cin = Scanner (System.in);
while(cin.hasNext())//等价于!=EOF
n=cin.nextInt(x);//读入一个int型x进制的数,一般x缺省,默认十进制
n=cin.nextBigInteger(x);//读入一个x进制的大整数,一般x缺省,默认十进制
数据类型:
BigInteger 任意大的整数,原则上是,只要你的计算机的内存足够大,可以有无限位的
BigDecimal 任意大的实数,可以处理小数精度问题。
BigInteger中一些常见的常数:
BigInteger.ZERO, BigInteger.ONE, BigInteger.TEN
将int型的数赋值给BigInteger:
BigInteger.valueOf(k);
定义一个x进制的BigInteger:
BigInteger a = new Bigteger("123", x);
x缺省默认为十进制
基本的函数:
valueOf(): 赋初值
add(): + a.add(b);
subtract(): -
multiply(): *
divide(): /
remainder(): this % val
divideAndRemainder(): a[0]=this / val; a[1]=this % val
pow(): a.pow(b)=a^b
gcd(), abs(): 公约数,绝对值
negate(): 取负数
signum(): 符号函数
mod(): a.mod(b)=a%b;
shiftLeft(): 左移,this << n ,this*2^n;
shiftRight(): 右移,this >> n,this/2^n;
and(): &&,且;
or(): ||,或;
xor(): ^, 异或
not(): !, 非;
bitLength(): 返回该数的最小二进制补码表示的位的个数,即 *不包括* 符号位 (ceil(log2(this <0 ? -this : this + 1)))。对正数来说,这等价于普通二进制表示的位的个数。
bitCount(): 返回该数的二进制补码表示中不包扩符号位在内的位的个数。该方法在 BigIntegers 之上实现位向量风格的集合时很有用。
isProbablePrime(): 如果该 BigInteger 可能是素数,则返回 true ;如果它很明确是一个合数,则返回 false 。 参数 certainty 是对调用者愿意忍受的不确定性的度量:如果该数是素数的概率超过了 1 - 1/2**certainty方法,则该方法返回 true 。执行时间正比于参数确定性的值。
compareTo(): 根据该数值是小于、等于、或大于 val 返回 -1、0 或 1;
equals(): 判断两数是否相等,也可以用compareTo来代替;
min(),max(): 取两个数的较小、大者;
intValue(),longValue(),floatValue(),double(): 把该数转换为该类型的数的值。
toString(x): 当要把计算结果输出时应该使用.toString(x)方法将其转换为x进制的字符串,一般x缺省,默认为十进制。
类型转换:
int -> BigInteger :
int a = 3;
BigInteger b = BigInteger.valueOf(a);
BigInteger -> int :
BigInteger a = BigInteger.TEN;
int b = a.intValue();
int -> String :
int a = 3;
String b = a.toString();
String -> int :
String a = "123";
int b = Intrger.parseInt(a);
(还有Float.parseFloat(),用法类似)
String -> BigInteger :
String a = "123";
BigInteger b = new BigINteger(a);
BigInteger -> String :
BigInteger a = BigInteger.TEN;
String b = a.toString();
进制转换:
10进制 -> 16进制:
Integer.toHexString(4);
10进制 -> 2进制:
Integer.toBinaryString(4);
16进制 -> 10进制:
Integer.parseInt("4", 16);
注意:
关于remainder和mod的区别:
BigInteger remainder(BigInteger val)
和mod类似,区别在于remainder是取余运算,mod是模运算,具体区别如下图: