ACM经常会遇到要处理大数,而java对此有一些比较好的封装类。
package ACM;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*;
import java.io.*;
public class BigData {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
BigInteger ans = BigInteger.ONE;
//比较大小
BigInteger a = input.nextBigInteger();
BigInteger b = input.nextBigInteger();
int flag = a.compareTo(b);
if(flag == -1)
System.out.println("a<b");
else if(flag == 0)
System.out.println("a==b");
else
System.out.println("a>b");
//大数加法
ans = a.add(b);
System.out.println(a + " + " + b + " = " + ans);
//大数乘法
System.out.println(a + " * " + b + " = " + a.multiply(b));
//大数除法
System.out.println(a + " / " + b + " = " + a.divide(b));
//大数阶乘
int n = input.nextInt();
for(int i = 1; i <= n; ++i)
ans = ans.multiply(BigInteger.valueOf(i));
System.out.println(n+"的阶乘为"+ans);
//高精度幂
BigDecimal ansDec = input.nextBigDecimal();
n = input.nextInt();
String res = ansDec.pow(n).stripTrailingZeros().toPlainString(); //整数去掉小数点和后面的0
if(res.startsWith("0")) //去掉前导0
{
res = res.substring(1);
}
System.out.println(res);
//大数开根号
BigDecimal num = input.nextBigDecimal();
//保留1000位有效数字
MathContext mc = new MathContext(2,RoundingMode.HALF_DOWN);
BigDecimal finalnum = new BigDecimal(Math.sqrt(num.doubleValue()) ,mc);//mc可以不用
System.out.println(finalnum);
//保留小数点后两位
DecimalFormat myformat=new java.text.DecimalFormat("#.00");
System.out.println(myformat.format(finalnum));
}
}