JAVA大数---基本操作模板

引论

在算法竞赛中我们经常遇到大数问题,例如求一个很大的斐波那契数。住在这种情况下我们用常规解法肯定是存不下的,而我们自己写一个大数的算法又过于麻烦且易于出错,在这种情况下使用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,大于返回1

4、常用方法
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:当然也有大数数组,和整型数组操作一样。

参考:

https://blog.csdn.net/DongChengRong/article/details/78848399 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值