组合数的高精度算法

【高精度】组合数的高精度算法

题目描述

由 于邪狼编写的万进制高精度除法有小小的缺陷,导致修罗王打开最后一道牢门时触发了陷阱,修罗王和邪狼因此落入一个类似于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);
                       
       }
}
View Code

 

posted on 2016-07-08 18:53  disppr  阅读(660)  评论(0编辑  收藏  举报