JAVA 大整数

本文详细介绍了Java中的输入输出操作,包括使用Scanner类的不同格式进行数据读取,以及如何处理大整数运算。涵盖了基本数据类型的读取方法,如整数、字符串和双精度浮点数的输入,并提供了处理多行数据的示例。同时,深入讲解了BigInteger类的使用,包括常量定义、输入输出、算术运算、比较和模运算等关键方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本操作:
java的输入输出:

输入:

格式1:Scanner sc = new Scanner (new BufferedInputStream(System.in));
格式2:Scanner sc = new Scanner (System.in);
//在读入数据量大的情况下,格式1的速度会快些。

BigIntege n=input.nextBigInteger();
int n = sc.nextInt();      //scanf("%d", &n); 或  cin >> n; 
String s = sc.next();      // scanf("%s", s); 或  cin >> s; 
double t = sc.nextDouble();//scanf("%lf", &t); 或 cin >> t; 
String s = sc.nextLine();  //gets(s); 或 cin.getline(...); 

sc.hasNext()
sc.hasNextInt()
sc.hasNextDouble()
sc.hasNextLine()           //判断是否有下一个输入可以用

//在有多行数据输入的情况下,一般这样处理:
static Scanner in = new Scanner(System.in);
while(in.hasNextInt())  //!=EOF
{
}
while(in.hasNext())     //!=EOF
{
}

输出

System.out.print();   //不换行

System.out.println(); //输出换行

System.out.format();  //与scanf()类似

System.out.printf();  //与scanf()类似

大整数:

大整数:
常量:
BigInteger.ONE  1
BigInteger.TEN  10
BigInteger.ZERO 0

输入:
BigIntege n=input.nextBigInteger();
输出:
System.out.println("a="+a); //输出换行

方法:
c=a.add(b) 			//c=a+b;
c=a.subtract(b)     //c=a-b;
c=a.multiply(b)     //c=a*b;
c=a.divide(b)       //c=a/b;
BigInteger[]=ivideAndRemainder(BigInteger val) 返回(t/v)(t%v)的数组。
c=a.pow((int)b)     //c=a^b;
c=a.modPow(b, mod)  //c=a^b mod mod;
c=a.xor(b)          //c=a^b;
c=a.gcd(b)          //c=gcd(a, b);
c=a.mod(b)          //c=a mod b;
c=a.remainder(mod)  //c=a%mod   %:有正负 mod:为正
c=a.negate()        //c=-a;
int=a.signum()      //返回a的正负号
c=a.abs()           //c=a的绝对值; 
int=a.compareTo(b)  //a, b比较
c=a.max(b)          //c=max(a, b);
c=a.min(b)          //c=min(a, b);

更多:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

快速幂:
```java
public BigInteger POW (BigInteger a,BigInteger b,BigInteger mod)//快速幂
{
    
    BigInteger ans = BigInteger.valueOf(1);          //  大数 1
    BigInteger TW=BigInteger.ONE.add(BigInteger.ONE);// 大数 2
    while(!b.equals(BigInteger.ZERO))                //如果b != 0  进入循环
    {
        if(b.remainder(TW).equals(BigInteger.ONE))   //  如果该位==1,则ans=ans*a;
            ans = (ans.multiply(a)).remainder(mod);
        b=b.divide(TW);                              // 为了下一步计算b二进制的下一位
        a = (a.multiply(a)).remainder(mod);          // a*a 相当于A * A 或者 A^2 * A^2 等等
    }
    return ans;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值