java大数

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]);
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值