创建大数类
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
Scanner cin=new Scanner(System.in);
BigInteger num1=new BigInteger("12345");
BigInteger num2=cin.nextBigInteger();
BigDecimal num3=new BigDecimal("123.45");
BigDecimal num4=cin.nextBigDecimal();
BigInteger(整数)
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger num1=new BigInteger("12345");
BigInteger num2=new BigInteger("45");
//加法
System.out.println(num1.add(num2));
//减法
System.out.println(num1.subtract(num2));
//乘法
System.out.println(num1.multiply(num2));
//除法(相除取整)
System.out.println(num1.divide(num2));
//取余
System.out.println(num1.mod(num2));
//最大公约数GCD
System.out.println(num1.gcd(num2));
//取绝对值
System.out.println(num1.abs());
//取反
System.out.println(num1.negate());
//取最大值
System.out.println(num1.max(num2));
//取最小值
System.out.println(num1.min(num2));
//是否相等 如果a、b相等返回true否则返回false
System.out.println(num1.equals(num2));
}
}
BigDecimal(浮点数)
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal num1=new BigDecimal("123.45");
BigDecimal num2=new BigDecimal("4.5");
//加法
System.out.println(num1.add(num2));
//减法
System.out.println(num1.subtract(num2));
//乘法
System.out.println(num1.multiply(num2));
//除法(在divide的时候就设置好要精确的小数位数和舍入模式)
System.out.println(num1.divide(num2,10,BigDecimal.ROUND_HALF_DOWN));
//取绝对值
System.out.println(num1.abs());
//取反
System.out.println(num1.negate());
//取最大值
System.out.println(num1.max(num2));
//取最小值
System.out.println(num1.min(num2));
//是否相等
System.out.println(num1.equals(num2));
//判断大小( > 返回1, < 返回-1)
System.out.println(num2.compareTo(num1));
}
}
P.S.
新建一个值为123的大整数对象(ps:大数运算只能在大数之间,整型和大数之间不能直接运算,这就是此操作的必要性)
BigInteger a=new BigInteger(“123”); //第一种,参数是字符串
BigInteger a=BigInteger.valueOf(123); //第二种,参数可以是int、long
例如:如果要求2^n 必须先把2转化成大数型, BigInteger a = new BigInteger(“2”)。
BigInteger中的常数
BigInteger.ZERO //大整数0
BigInteger.ONE //大整数1
BigInteger.TEN //大整数10
例题 :
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:当然也有大数数组,和整型数组操作一样。
5.牛客2019多校第一场Fraction Comparision
import java.math.BigInteger;
import java.util.Scanner;
public class Main {//类名一定要写Main啦 包要删掉
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
while(cin.hasNext())
{
BigInteger x = new BigInteger(cin.next());
BigInteger a = new BigInteger(cin.next());
BigInteger y = new BigInteger(cin.next());
BigInteger b = new BigInteger(cin.next());
int ans=x.multiply(b).compareTo(y.multiply(a));
if(ans==1)System.out.println(">");
else if(ans==0)System.out.println("=");
else System.out.println("<");
}
}
}