У меня неправильный вывод для 13 факториала, как мне это исправить? - PullRequest
2 голосов
/ 18 июня 2019

Мой вывод 13! = 1932053504

Ожидаемый результат 13! = 6227020800

Я пытался использовать int, long int, но вывод остался прежним

long int fact(long int num);
int main(){
    long int n;
    printf("Enter a number to find factorial: ");
    scanf("%ld",&n);
    printf("%ld!= %ld",n,fact(n));
}
long int fact(long int n){
    if(n>=1)
        return n*fact(n-1);
    else
        return 1;
}

Выход: 13! = 1932053504

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Ожидаемое значение превышает 32 бита, в результате получается фактический результат, обрезанный до 32 бит:

1932053504 equals (6227020800 & 0xFFFFFFFF)

Вам потребуется проверить емкость int и long int в вашей среде, например, с print -ми их sizeof.

0 голосов
/ 18 июня 2019

Вы должны использовать long long int для выполнения расчетов на 64 битах. Если вы также преодолеете этот барьер, вам придется делать более сложные вещи.

Примечание: используйте long дважды, это не ошибка - при условии, что компилятор поддерживает 64-битные архитектуры.

Если вас не интересуют отрицательные числа, вы можете использовать unsigned long long int для дополнительного «комфорта».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...