大数java来一波

java大数计算

学了java许久不用,感觉也是忘的差不多了,今天来复习一波简单的java用法吧;

1.交oj时注意class名称必须用Main

2.输入

sc = new Scanner(System.in) ,sc. hasNext() // 检测是否运行到文件末尾

nextInt(), nextDouble()什么的就不用我多说了吧。

3.BigInteger类

BigInteger a = new BigInteger("1234567") 构造时里面用字符串就好了

或者BigInteger b  = BigInteger.valueOf(3)用int赋值也行啊

比较大小这个还是比较坑- -

不能直接用 ==,<=,>=之类的,还得用toString()之后进行比较或者用b.compareTo(a)进行比较;

最坑的就是居然b.add(a)还要赋值 mark一波, b = b.add(a);

//poj1503 AC代码
import java.util.*;
import java.math.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		BigInteger a, b = new BigInteger("0");
		while (sc.hasNext()) {
			a = sc.nextBigInteger();
			if (a.toString() == ("0"))
				break;
			b = b.add(a);
		}
		System.out.print(b.toString());
	}

}

注意一下dp的方法就好了,dp[i][k] 表示以a[i]结尾的长度为k的上升子序列 dp[p][i] = sum(dp[q][i - 1]);(q = 0 : p - 1)

//HDOJ5568 AC代码(dp + 大数)
import java.util.*;
import java.math.*;

public class Main {
	final static int maxn = 110;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n, k;
		int[] a = new int[maxn];
		BigInteger[][] dp = new BigInteger[maxn][maxn];
		while (sc.hasNext()) {
			n = sc.nextInt();
			k = sc.nextInt();
			for (int i = 0; i < n; i++)
				dp[i][1] = new BigInteger("1");
			for (int i = 0; i < n; i++)
				a[i] = sc.nextInt();
			for (int i = 2; i <= k; i ++)
				for(int p = 0; p <= n - 1; p ++){
					dp[p][i] = new BigInteger("0");
					for(int q = 0; q <= p - 1; q ++){
						if(a[p] > a[q]) dp[p][i] = dp[p][i].add(dp[q][i - 1]);
					}
				}
			BigInteger result = new BigInteger("0");
			for(int i = 0; i <= n - 1; i ++){
				result = result.add(dp[i][k]);
			}
			System.out.println(result);
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值