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
严格为正,这将始终有效。
所以我最近一直在用 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
严格为正,这将始终有效。