基本开头
import java.math.*;
import java.util.*;
public class Main {
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);//创建输入
BigInteger a=cin.NextBigInteger();//输入
}
}
EOF:用法
普通的数: while(cin.hasNextInt())
//等同于!=EOF,第一数一定要输入整形的
大数的一般是:while(cin.hasNextBigInteger())
//第一个数一定要输入大数
System.out.print(m.toString()); //输出
//m.toString() 将m转为String 类
大数用法
定义
BigInteger[] a=new BigInteger[100]; //数组
BigInteger a=new BigInteger("1"); //赋值
a=new BigInteger(""+b); //b是int类型的
运算
//d为int型,a,b,c都为大数
c=a.add(b); // 相加
c=a.subtract(b); // 相减
c=a.multiply(b); // 相乘
c=a.divide(b); // 相除取整
c=a.gcd(b); // 最大公约数
c=a.remainder(b); // 取余
c=a.mod(b); // a mod b
c=a.abs(); // a的绝对值
c=a.negate(); // a的相反数
c=a.pow(d); // a的b次幂 d为int型
c=a.max(b); // 取a,b中较大的
c=a.min(b); // 取a,b中较小的
d=a.compareTo(b); // 比较a与b的大小d=-1小于,d=0等于,d=1大于,d为int型
a.equals(b); // 判断a与b是否相等 相等返回true 不相等返回false
转换
d=a.intValue(); // 将大数a转换为 int 类型赋值给 d
e=a.longValue(); // 将大数a转换为 long 类型赋值给 e
f=a.floatValue(); // 将大数a转换为 float 类型赋值给 f
g=a.doubleValue(); // 将大数a转换为 double 类型赋值给 g
s=a.toString(); // 将大数a转换为 String 类型赋值给 s
s=a.toPlainString(); //将大数a转换为String类型赋值给s,且不表示为科学计数法
a=BigInteger.valueOf(e); // 将 e 以大数形式赋值给大数 a (e只能为long或int )
a=newBigInteger(s, d); // 将s数字字符串以d进制赋值给大数a如果d=s字符数字的进制则等同于将数字字符串以大数形式赋值给大数a
进制
String st = Integer.toString(num, base);
//把int型num当10进制的数转成base进制数存入st中 (base <= 35).
int num = Integer.parseInt(st, base);
//把st当做base进制,转成10进制的int
(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).
BigInteger m = new BigInteger(st, base); // st是字符串,base是st的进制.
BigInteger a;
int b;
String c;
a=cin.nextBigInteger(b); //以b进制读入一个大数赋值给a
c=a.toString(b); // 将大数a以b进制的方式赋给字符串c
a=newBigInteger(c, b); //把c 当做“b进制“转为十进制大数赋值给a
PS.
每次使用String进行单个字符操作时
需要先
String s;
char[]c=s.toCharArray();
大数用法(浮点数)
定义
String a = "1";
String b = "4.56";
BigDecimal aBD = new BigDecimal(a);
BigDecimal bBD = new BigDecimal(b);
BigDecimal resultBD
=aBD.divide(bBD).setScale(3, java.math.BigDecimal.ROUND_HALF_UP);
//3是保留小数,ROUND_HALF_UP是四舍五入
//优先使用String而不是Double构造BigDecimal
//加减乘除参照大整数运算
除法时的舍入控制
ROUND_CEILING //向正无穷方向舍入
ROUND_DOWN //向零方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向远离0的方向舍入