編程計算組合數

問題

組合數是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比較大時也不會越界。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章