如何将此代码转换为数组或malloc?

时间:2017-04-15 15:08:57

标签: c factorial

#include <stdio.h>
#include <stdlib.h>

int factorial(int n) {
    int f;

    for(f = 1; n > 0; n--)
        f *= n;
    return f;
} 

int ncr(int n,int r) {
    return factorial(n) / ( factorial(n-r) * factorial(r) );
}

int main(int argc, char* argv[]) {

    int n, i, j;

    n = atoi(argv[1]);

    for(i = 0; i <= n; i++) {

        printf("1");

        for(j = 1; j <= i; j++)
            if(i == j && j > 0) printf(" 1");
            else printf(" %d", ncr(i, j));

        printf("\n");
    }
    return 0;
}

如果我使用大于12的数字的参数测试它,我会从第12行(?)得到奇怪的数字。为什么会发生这种情况?我应该使用malloc还是数组?有人可以将此代码更改为数组或malloc吗?感谢。

1 个答案:

答案 0 :(得分:1)

为何奇怪?因子13是6227020800,超过INTMAX所以你包裹在负面的土地上。 “漫漫长”可能会奏效。了解尺寸限制的MAX和MIN值。

在开始设计程序之前,请务必确定您的范围。

相关问题