引论

在算法竞赛中我们经常遇到大数问题,例如求一个很大的斐波那契数。住在这种情况下我们用常规解法肯定是存不下的,而我们自己写一个大数的算法又过于麻烦且易于出错,在这种情况下使用java中自带的大数类是我们最好的选择。(TLE就换方法咯)

介绍

java中用于操作大数的类主要有两个,一个是BigInteger,代表大整数类用于对大整数进行操作,另一个是BigDecimal,代表高精度类,用于对比较大或精度比较高的浮点型数据进行操作。因为这两种类的使用方法是一样的,所以下面我们以BigInteger为例进行讲解

基本用法

1、新建一个值为123的大整数对象(ps:大数运算只能在大数之间,整型和大数之间不能直接运算,这就是此操作的必要性)
 BigInteger a=new BigInteger(“123”); //第一种,参数是字符串
 BigInteger a=BigInteger.valueOf(123); //第二种,参数可以是int、long例如:如果要求2^n  必须先把2转化成大数型, BigInteger a = new BigInteger("2")。
2、大整数的四则运算
 a. add(b); //a,b均为BigInteger类型,加法
 a.subtract(b); //减 法
 a.divide(b); //除法
 a.multiply(b); //乘法3、大整数比较大小
 a.equals(b); //如果a、b相等返回true否则返回false
 a.comareTo(b); //a小于b返回-1,等于返回0,大于返回14、常用方法
 a.mod(b); //求余
 a.gcd(b); //求最大公约数
 a.max(b); //求最大值
 a.min(b); //求最小值5、BigInteger中的常数
 BigInteger.ZERO //大整数0
 BigInteger.ONE //大整数1
 BigInteger.TEN //大整数10
import java.math.BigInteger;
import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner cin = new Scanner(System.in);
		while(cin.hasNext())   //多组输入
		{
			BigInteger a = cin.nextBigInteger();
			BigInteger b = cin.nextBigInteger();
			System.out.println(a.add(b));
		}	
	}
}
//String ss = ANS.toString(); 如果要求大数ANS的位数,先把ANS转化为字符串,ss.length()便是答案。
/*
           System.out.println(a.add(b)); //大整数加法
           System.out.println(a.subtract(b)); //大整数减法
           System.out.println(a.multiply(b)); //大整数乘法
           System.out.println(a.divide(b)); //大整数除法(取整)
           System.out.println(a.remainder(b)); //大整数取模
          
           //大整数的比较
           if( a.compareTo(b) == 0 ) System.out.println("a == b"); //大整数a==b
           else if( a.compareTo(b) > 0 ) System.out.println("a > b"); //大整数a>b
           else if( a.compareTo(b) < 0 ) System.out.println("a < b"); //大整数a<b
          
           //大整数绝对值
           System.out.println(a.abs()); //大整数a的绝对值
          
           //大整数的幂
           int exponent=10;
           System.out.println(a.pow(exponent)); //大整数a的exponent次幂
          
           //返回大整数十进制的字符串表示
           System.out.println(a.toString());
          
           //返回大整数p进制的字符串表示
           int p=8;
           System.out.println(a.toString(p));
*/

经典例题 :

1.http://acm.hdu.edu.cn/showproblem.php?pid=2054           (大数A==B?)

2. https://vjudge.net/problem/OpenJ_Bailian-2981                   (大数A+B)

3.http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=28    (大数阶乘)          ps:23的阶乘就存不下了。

4.http://acm.hdu.edu.cn/showproblem.php?pid=1715             (斐波那契数列)ps:当然也有大数数组,和整型数组操作一样。