计算组合数

#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;
}




溢出是个头痛的问题。

posted @ 2018-03-17 16:40  TBHacker  阅读(482)  评论(0编辑  收藏  举报