Java中常用的大数模板

我们都知道,在ACM竞赛当中,我们普遍都会用C++来写代码,因为java和python太慢了,但是当遇到大数的时候,Java将碾压C++,下面我们一下来看看Java在大数方面的各种算法。
首先是大数的建立

		Scanner cin = new Scanner(System.in);
		BigInteger a = cin.nextBigInteger();

然后是EOF的类型,平时我们在C++是这样用的:

while(cin >> n)
//
while(~scanf("%d",&n))
//
while(scanf("%d",&n) != EOF)

但是用java来写就是这个亚子的

while(cin.hasNextBigInteger())

然后我们在来说下,java的各种大数方面的运算

//d为int型,a,b,c都为大数 
 
c=a.add(b);           // 相加 
 
c=a.subtract(b);      //   相减 
 
c=a.multiply(b);      // 相乘 
 
c=a.divide(b);        // 相除取整 
 
c=a.gcd(b);           //  最大公约数 
 
c=a.remainder(b);     //  取余 
 
c=a.mod(b);           // a mod b 
 
c=a.abs();            // a的绝对值 
 
c=a.negate();         //a的相反数 
 
c=a.pow(d);           // a的b次幂   d为int型     
 
c=a.max(b);           // 取a,b中较大的 
 
c=a.min(b);           // 取a,b中较小的 
 
d=a.compareTo(b);    // 比较a与b的大小d=-1小于,d=0等于,d=1大于,d为int型 
 
a.equals(b);        // 判断a与b是否相等   相等返回true  不相等返回false   

最后我们再来看一看java在大数方面的各种转化

d=a.intValue();      // 将大数a转换为 int 类型赋值给 d 
 
e=a.longValue();     //  将大数a转换为  long 类型赋值给 e 
 
f=a.floatValue();    //  将大数a转换为  float 类型赋值给 f 
 
g=a.doubleValue();   //  将大数a转换为  double 类型赋值给 g 
 
s=a.toString();      // 将大数a转换为 String 类型赋值给 s 
 
s=a.toPlainString(); //将大数a转换为String类型赋值给s,且不表示为科学计数法
 
a=BigInteger.valueOf(e);// 将 e 以大数形式赋值给大数 a (e只能为long或int )
 
a=newBigInteger(s,d);
/* 将s数字字符串以d进制赋值给大数a如果d=s字符数字的进制则等同于
将数字字符串以大数形式赋值给大数a */

你可能感兴趣的:(ACM模板)