значение factorial int в C - PullRequest
       25

значение factorial int в C

5 голосов
/ 28 марта 2020

, поэтому я недавно делал проект homeschool в C. Нас попросили создать код, который будет возвращать вам факториал числа, которое вы ввели. Это круто и просто, но нас также попросили сделать что-то, что напишет вам ошибку, если число факториалов больше значения, чем максимальное значение целого числа.

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;

}

Это мой код, который отлично работает, если только значение factorial не больше значения int. Я пытался сделать заявление if, например, if (faktorial> 2147483647), чем сообщение об ошибке printf, но оно просто не сработало и все равно делает faktorial = 0.

1 Ответ

6 голосов
/ 28 марта 2020

Вы не можете проверить, если факториал больше 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 строго положительно, это всегда будет работать.

...