简单记录一下JAVA的大数的使用,方便自己以后查询,比较基础,即使完全没有JAVA的基础的朋友也可以学习一下。
===============分割线之JAVA基础语法================
JAVA中首先包含头文件
1.标准读入头文件
2.大数BigInteger这个数据类型在math中
import java.util.*;
import java.math.*;
JAVA的读入需要先进行一个声明:
Scanner sc = new Scanner(System.in);
JAVA中的!=EOF的格式控制:
while(sc.hasNext())
JAVA中的输出:
System.out.println(a);//自带换行的输出
System.out.print(a); //不自带换行的输出
JAVA必知技巧:
利用 Alt+‘ / ’ 组合键完成快速地键入;
比如 要输入System.out.prinln();时,只需键入syso + 组合键 便能得到结果;
一般快速键入只需输入 第一个单词的前几位字母+下一个单词的首字母 后按下组合键进行选择就好
==================分割线之大数的使用===================
进行大数的运算,首先你要知道大数是一个封装好的类,也就是说所有的操作需要调用函数进行。并且大数的所有运算的对象必须同样是大数。
定义一个大数:
BigInteger a ;
定义一个大数数组:
BigInteger A[] = new BigInteger[400];//定义一个长度为400的数组
对大数进行赋值:
a = sc.nextBigInteger();//标准读入赋值
a = BigInteger.valueOf(1);//手动赋常值
对大数进行加减乘除膜操作:
a.add(b);//加法运算
a.subtract(b);//减法运算
a.multiply(b);//乘法运算
a.divide(b);//除法运算
a.mod(b);//取模运算
善用头文件自带的一些大数常数:
BigInteger.ONE;//1
BigInteger.ZERO;//0
BigInteger.TEN;//10
另外JAVA的大数自带一些比较复杂的运算必要时可以使用:
a.gcd(b);//最大公因数
a.max(b);//最大值(a,b)
a.min(b);//最小值(a,b)
a.modPow(k, mod);// 返回(a^k)%mod
a.toString();//返回大整数的string型
============分割线之BZOJ1002轮状病毒=============
另附上BZOJ1002轮状病毒的JAVA大数AC代码帮助理解:
import java.util.*;
import java.math.*;
public class Main {
static BigInteger A[] = new BigInteger[400];
static BigInteger B[] = new BigInteger[400];
public static void main(String[] args) {
B[1] = B[2] = BigInteger.valueOf(1);
B[3] = BigInteger.valueOf(4);
B[4] = BigInteger.valueOf(3);
B[5] = BigInteger.valueOf(11);
for(int i=1;i<=300;i++){
if(i>5){
B[i] = (B[i-2].multiply(BigInteger.valueOf(3))).subtract(B[i-4]);
}if(i%2==1){
A[i] = B[i].multiply(B[i]);
}else {
A[i]=B[i].multiply(B[i]).multiply(BigInteger.valueOf(5));
}
}
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
int n;
while(sc.hasNext()){
n = sc.nextInt();
System.out.println(A[n]);
}
}
}