問題
組合數是C(n,m),是排列組合中非常重要的一部分,直接按照公式求階乘會超過int,long的範圍,因此需要技巧來編程求解.
本來想自己寫一篇博客,但是看到某位大佬寫的比我想寫的還要全,因此先放上他博客的鏈接:
(https://blog.csdn.net/liuzibujian/article/details/81346595)
方法一:楊輝三角
見以上博客
方法二:簡單方法
public long get(int m,int n){
long res=1;
for(int i=0;i<m;i++){
res = res*(n-i)/(i+1);
}
return res;
}
這種方法就是通過中間結果相除來避免越界。每一次循環分子分母一定能整除,所以能得到正確答案,當n,m比較大時也不會越界。