参考飘过的小牛的博客,练习NYOJ的Java大数题目,主要是为了熟悉一下Java语言。(都快算抄袭了,,,)
Java中的运算符和常用方法的使用——链接
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String []args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
BigInteger ans = BigInteger.ONE;
for(int i = 1;i <= n;i++)
ans = ans.multiply(BigInteger.valueOf(i));
System.out.println(ans);
}
}
NYOJ 45 棋盘覆盖
这个棋盘是正方形的,去掉一个格子以后,恰好可以用图2全部覆盖(这个的原因未知),所以棋盘的格子总数 4^k - 1 除以3 就是结果了。
即(4^k - 1) / 3
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String []args){
Scanner in = new Scanner(System.in);
int t = in.nextInt(),k;
while(t-- > 0)
{
k = in.nextInt();
BigInteger ans = new BigInteger("4");
for(int i = 1;i <= k-1;i++)
ans = ans.multiply(BigInteger.valueOf(4));
System.out.println(ans.subtract(BigInteger.valueOf(1)).divide(BigInteger.valueOf(3)));
}
}
}
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String []args){
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
BigInteger a = in.nextBigInteger();
BigInteger b = in.nextBigInteger();
if(a.equals(BigInteger.ZERO) && b.equals(BigInteger.ZERO))
break;
int flag = a.compareTo(b);
if(flag == -1)
System.out.println("a<b");
else if(flag == 1)
System.out.println("a>b");
else
System.out.println("a==b");
}
}
}
NYOJ 103 A+B Problem II
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String []args){
Scanner in = new Scanner(System.in);
int t = in.nextInt();
for(int ca = 1;ca <= t;ca++)
{
BigInteger a = in.nextBigInteger();
BigInteger b = in.nextBigInteger();
BigInteger sum = a.add(b);
System.out.println("Case " + ca + ":");
System.out.println(a+ " + " +b + " = " +sum);
}
}
}
NYOJ 114 某种序列
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String []args){
Scanner in = new Scanner(System.in);
BigInteger [] a = new BigInteger[105];
while(in.hasNext())//多组数据
{
for(int i = 0;i < 3;i++)
a[i] = in.nextBigInteger();
for(int i = 3;i <= 99;i++)
a[i] = a[i-1].add(a[i-2]).add(a[i-3]);
System.out.println(a[99]);
}
}
}
import java.math.BigDecimal;
import java.util.Scanner;
public class Main{
public static void main(String []args){
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
BigDecimal R = in.nextBigDecimal();
int n = in.nextInt();
String str = R.pow(n).stripTrailingZeros().toPlainString();//去掉小数点后的0
if(str.startsWith("0"))
str = str.substring(1);
System.out.println(str);
}
}
}
//Java帅呆了,自动补头文件啊
//然而多个BigInteger的头
NYOJ 513 A+B Problem IV
import java.math.BigDecimal;
import java.util.Scanner;
public class Main{
public static void main(String []args){
Scanner in = new Scanner(System.in);
BigDecimal esp = new BigDecimal("0.0");
while(in.hasNext())
{
BigDecimal a = in.nextBigDecimal();
BigDecimal b = in.nextBigDecimal();
String str = a.add(b).stripTrailingZeros().toPlainString();//去掉小数点后的0
BigDecimal sum = a.add(b);
if(sum.compareTo(esp) == 0)
System.out.println(0);
else
System.out.println(str);
}
}
}
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String [] args){
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
BigDecimal a = in.nextBigDecimal();
BigDecimal b = in.nextBigDecimal();
BigDecimal c = a.subtract(b);
String str = c.stripTrailingZeros().toPlainString();//去掉小数点后的0
if(str.startsWith("0"))
System.out.println("YES");
else
System.out.println("NO");
}
}
}
803 A/B
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String [] args){
Scanner in = new Scanner(System.in);
BigInteger a,b,c;
String s;
while(in.hasNext())
{
a = in.nextBigInteger();
s = in.next();
b = in.nextBigInteger();
if(s.charAt(0) == '/')
c = a.divide(b);
else
c = a.remainder(b);
System.out.println(c);
}
}
}