Я пытаюсь вычислить 52! используя язык C. Но мне кажется, что я как-то не справляюсь с большими числами. Я не могу сказать, мой ли это компилятор или я что-то делаю неправильно ...
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
uint64_t factorielle(int n) {
if(n == 0)
return 1;
else
return n * factorielle(n-1);
}
int main(int argn, char** argv) {
printf("Number : %"PRId64"\n", factorielle(52));
return 0;
}
Получаю такой результат:
Number : -8452693550620999680
Я пробовал с GCC 5.3.0, GCC 7.2.0 и Zapcc 5.0.0
Большое спасибо !
int
. - person Oliver Charlesworth   schedule 27.11.2017printf
напечатать значение со знаком, ноfactorielle
возвращает значение без знака. Однако исправление этого не поможет, для этого вам понадобится библиотека bignum. - person Some programmer dude   schedule 27.11.2017PRIu64
вместоPRId64
. Ваша функция возвращает целое число без знака! Но думаю 52! создать слишком большое число! - person Sir Jo Black   schedule 27.11.2017uint64_t
, очевидно, 0xFFFFFFFFFFFFFFFF, то есть 18.446.744.073.709.551.615! - person Sir Jo Black   schedule 27.11.201718.446.744.073.709.551.615!
(!) Кажется немного большим ...;) - person   schedule 27.11.2017uint64_t x = (0xFFFFFFFFFFFFFFFF); printf("Number : %"PRIu64"\n", x);
...;) - person Sir Jo Black   schedule 27.11.2017