Java中的BigInteger在ACM中的应用
在ACM中的做题时,经常会遇见一些大数的问题,这是当我们用C或是C++时就会觉得比较麻烦,就想有没有现有的现有的可以直接调用的BigInter,那样就方便很多啦。在java中就有的,所以在这儿我就做一个简要的介绍吧
—:在java中的基本头文件(java中叫包)
import java.io.*
importjava.util.* 我们所用的输入scanner在这个包中
importjava.math.* 我们下面要用到的BigInteger就这这个包中
二:输入与输出
读入 Scanner cin=new Scanner(System.in)
While(cin.hasNext()) //相当于C语言中的!=EOF
n=cin.nextInt(); //输入一个int型整数
n=cin.nextBigInteger(); //输入一个大整数
System.out.print(n); //输出n但不换行
System.out.println(); //换行
System.out.println(n); //输出n并换行
System.out.printf(“%d\n”,n); //类似C语言中的输出
三:定义变量
定义单个变量:
int a,b,c; //和C++ 中无区别
BigInteger a; //定义大数变量a
BigIntegerb=new BigInteger("2"); //定义大数变量 b赋值为 2;
BigDecimaln; //定义大浮点数类 n;
定于数组:
int a[]= new int[10] //定义长度为10的数组a
BigInteger b[] =new BigInteger[100] //定义长度为100的数组a
四:表示范围
布尔型 boolean 1 true,false false
字节型 byte 8 -128-127 0
字符型 char 16 ‘\u000’-\uffff ‘\u0000’
短整型 short 16 -32768-32767 0
整型 int 32 -2147483648,2147483647 0
长整型 long 64 -9.22E18,9.22E18 0
浮点型 float 32 1.4E-45-3.4028E+38 0.0
双精度型 double 64 4.9E-324,1.7977E+308 0.0
BigInteger任意大的数,原则上只要你的计算机内存足够大,可以有无限位
五:常用的一些操作
A=BigInteger.ONE; //把0赋给A
B=BigInteger.valueOf(3); //把3赋给B;
A[i]=BigInteger.valueOf(10); //把10赋给A[i]
c=a.add(b) //把a与b相加并赋给c
c=a.subtract(b) //把a与b相减并赋给c
c=a.multiply(b) //把a与b相乘并赋给c
c=a.divide(b) //把a与b相除并赋给c
c=a.mod(b) // 相当于a%b
a.pow(b) //相当于a^b
a.compareTo(b): //根据该数值是小于、等于、或大于a 返回 -1、0 或 1;
a.equals(b): //判断两数是否相等,也可以用compareTo来代替;
a.min(b),a.max(b): //取两个数的较小、大者;
注意以上的操作都必须是BigInteger类的。
给以样例POJ 2506
代码:
import java.math.*; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); BigInteger a[] = new BigInteger[300]; BigInteger b=new BigInteger("2"); a[0]=BigInteger.valueOf(1); a[1]=BigInteger.valueOf(1); a[2]=BigInteger.valueOf(3); a[3]=BigInteger.valueOf(5); int n; for(int i=3;i<=255;i++) { a[i]=a[i-1].add(a[i-2].multiply(b)); } while(cin.hasNext()) { n=cin.nextInt(); System.out.println(a[n]); } } }