C Программирование факториала, выводящего неправильные значения - PullRequest
2 голосов
/ 25 декабря 2011
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! выводит неверные значения.

Он либо дает отрицательное число, либо число недостаточно велико ... в чем проблема?

Ответы [ 3 ]

8 голосов
/ 25 декабря 2011
printf ("%2i! = %ld\n", i, fac);

Проблема здесь, используйте правильное обозначение для длинного типа без знака long

Попробуйте:

printf ("%2i! = %llu\n", i, fac);
2 голосов
/ 25 декабря 2011

Вы правильно рассчитываете, но печатаете неправильно!используйте% llu:

  printf ("%2i! = %llu\n", i, fac);

  20! = 2432902008176640000

Там!

2 голосов
/ 25 декабря 2011

Переменная fac имеет тип unsigned long long. Правильный спецификатор формата для этого типа: %llu:

printf ("%2i! = %llu\n", i, fac);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...