HDU1002(加法)
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int t;
BigInteger a,b;
Scanner in = new Scanner(System.in);
t=in.nextInt();
for(int i=1;i<=t;i++) {
a=in.nextBigInteger();
b=in.nextBigInteger();
System.out.println("Case " + i + ":");
if(i<t) {
System.out.println(a + " + " + b + " = " + a.add(b));
System.out.println();
}else {
System.out.println(a + " + " + b + " = " + a.add(b));
}
}
}
}
HDU1042(乘法)
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger[] bigArray = new BigInteger[10001];
Scanner in = new Scanner(System.in);
bigArray[0] = BigInteger.ONE;
bigArray[1] = BigInteger.ONE;
int n;
for(int i=2;i<=10000;i++) {
bigArray[i]=bigArray[i - 1].multiply(BigInteger.valueOf(i));
}
while(in.hasNext()) {
n=in.nextInt();
System.out.println(bigArray[n]);
}
}
}
HDU1133(组合数+阶乘)
卡特兰数,可以转化为一个格路问题
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger ans;
int a,b,cnt=0;
Scanner in = new Scanner(System.in);
while(in.hasNext()) {
cnt++;
a=in.nextInt();
b=in.nextInt();
ans=BigInteger.ONE;
if(a==0&&b==0)break;
if(a<b) {
ans=BigInteger.ZERO;
}
for(int i=1;i<=a+b;i++) {
ans=ans.multiply(BigInteger.valueOf(i));
}
BigInteger x1=BigInteger.valueOf(a-b+1);
BigInteger x2=BigInteger.valueOf(a+1);
ans=ans.multiply(x1);
ans=ans.divide(x2);
System.out.println("Test #" + cnt + ":");
System.out.println(ans);
}
}
}
HDU1250(斐波那契数列)
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger[] array = new BigInteger[10010];
Scanner in = new Scanner(System.in);
array[1]=BigInteger.ONE;
array[2]=BigInteger.ONE;
array[3]=BigInteger.ONE;
array[4]=BigInteger.ONE;
for(int i=5;i<=10005;i++) {
array[i]=array[i-1].add(array[i-2]);
array[i]=array[i].add(array[i-3]);
array[i]=array[i].add(array[i-4]);
}
int n;
while(in.hasNext()) {
n=in.nextInt();
System.out.println(array[n]);
}
}
}
HDU1297(递推)
分为结尾是男和结尾是女两种情况;
结尾是男:前面n-1个人的排法满足条件即可,即f(n-1);
结尾是女:,由于需要合法,所以倒数第二个也是女;若前n-2个合法,就是f(n-2);若前n-2个不合法,那么算上最后两个女之后合法需要倒数第三个是女,倒数第四个是男,所以实际上需要前n-4个人合法,为f(n-4);
综上,f(n)=f(n-1)+f(n-2)+f(n-4);
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger[] array = new BigInteger[1010];
Scanner in = new Scanner(System.in);
array[1]=BigInteger.valueOf(1);
array[2]=BigInteger.valueOf(2);
array[3]=BigInteger.valueOf(4);
array[4]=BigInteger.valueOf(7);
for(int i=5;i<=1000;i++) {
array[i]=array[i-1].add(array[i-2]);
array[i]=array[i].add(array[i-4]);
}
int n;
while(in.hasNext()) {
n=in.nextInt();
System.out.println(array[n]);
}
}
}