【高精度】组合数的高精度算法
题目描述
由 于邪狼编写的万进制高精度除法有小小的缺陷,导致修罗王打开最后一道牢门时触发了陷阱,修罗王和邪狼因此落入一个类似于N×M的网格棋盘中,修罗王和邪狼 必须要从左下角(1,1)开始逃到右上角(M,N)的安全位置,才可以摆脱狱警的追踪,但是修罗王和邪狼每次只能向上或向右走,试问有多少种不同的走法? 已知1≤N<1040,0≤M≤1000。
输入
两个整数M,N。
输出
一个整数,即路径数。
样例输入
2 2
样例输出
N—1
思路:从(1,1)到(N,M)共需要向上走N-1次,向右走M-1次,故总共走(N+M-2)次,所以路径数为CN+M-2
import java.math.BigInteger; import java.math.BigDecimal; import java.util.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner (System.in); int n, m; BigInteger a, b; n = cin.nextInt(); m = cin.nextInt(); n--; m--; a = BigInteger.ONE; for(int i = n + 1; i <= n+m; i++){ b = BigInteger.valueOf(i); a = a.multiply(b); } for(int i = 1; i <= m; i++){ b = BigInteger.valueOf(i); a = a.divide(b); } System.out.println(a); } }