int main (void) { int i; for (i=1; i<=20; i++) { int j; unsigned long long fac = 1; for ( j = 1; j<=i; ++j) { fac *= j; } printf ("%2i! = %ld\n", i, fac); } return 0; }
С 14! до 20! выводит неверные значения.
Он либо дает отрицательное число, либо число недостаточно велико ... в чем проблема?
printf ("%2i! = %ld\n", i, fac);
Проблема здесь, используйте правильное обозначение для длинного типа без знака long
Попробуйте:
printf ("%2i! = %llu\n", i, fac);
Вы правильно рассчитываете, но печатаете неправильно!используйте% llu:
printf ("%2i! = %llu\n", i, fac); 20! = 2432902008176640000
Там!
Переменная fac имеет тип unsigned long long. Правильный спецификатор формата для этого типа: %llu:
fac
unsigned long long
%llu