C中的阶乘整数值

factorial int value in C

所以我最近一直在用 C 语言做一个家庭学校项目。我们被要求编写 returns 你输入的数字的阶乘代码。这很酷也很简单,但我们也被要求做一些事情,如果阶乘的数量高于整数的最大值,什么会给你写一个错误。

int main() {
int a, i;
int faktorial = 1;
a = 10;


if (a < 0)
    printf("Chyba, faktorial z nekladneho cisla neexistuje. \n");
else {
    for (i = 1; i <= a; ++i) {
        faktorial *= i;
    }
    printf("Faktorial z %d = %d\n", a, faktorial);

}

return 0;

}

这是我的代码,它运行完美,除非阶乘的值大于 int 的值。我试着做 if 语句,比如 if (faktorial > 2147483647) 而不是 printf 错误消息,但它没有用,它仍然使 faktorial = 0。

您无法使用 > 测试阶乘是否大于 INT_MAX,因为 int 永远不会大于 INT_MAX。相反,您可以预先将 INT_MAX 除以 a,然后检查 faktorial 是否大于该值。这样您就不必在每次迭代时都进行划分:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
/* ... */
    int bound = INT_MAX / a;
    for (i = 1; i <= a; ++i) {
        if(faktorial > bound)
        {
            fputs("Integer Overflow!\n", stderr);
            return EXIT_FAILURE;
        }
        faktorial *= i;
    }

假设 a 严格为正,这将始终有效。