基本操作:
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;
}