1. 程式人生 > >計算組合數

計算組合數

代碼 如果 mat sca class return erro blog 原理

#include <stdio.h>
#include <math.h>
// 請先獨立完成,如果有困難可以翻閱本書代碼倉庫中的答案,但一定要再次獨立完成。
// “抓住主要矛盾”——始終把學習、實驗的焦點集中在最有趣的部分。如果直觀地解決方案行得通,就不必追究其背後的原理。

/**
【題目】計算組合數。
編寫函數,參數是兩個非負整數n和m,返回組合數 n!/m!(n-m)! ,其
中m≤n≤25。例如,n=25,m=12時答案為5200300。
*/


/**
【分析】自定義函數n!
*/

long long factorial(int n) {
    long long result = 1;
    int i;
    for (i = 1;i <= n;i++) {
        result *= i;
    }
    return result;
}

long long C(int n,int m) {
    long long result;
    result = factorial(n) / (factorial(m)*factorial(n-m)); //    容易溢出
    return result;
}

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);

    if (n> 25 || m<0 || m > n) {
        printf("input error");
        return 0;
    }

    printf("%d",C(n,m));


    return 0;
}



溢出是個頭痛的問題。

計算組合數