2011-12-25 4 views
2
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! выводит неправильные значения.C Программирование факториальных выводов неправильных значений

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

+0

http://stackoverflow.com/editing-help –

ответ

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

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

Try:

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

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

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

Ваше исправление верно, объяснение не является. Проблема не подписана/без знака, но длится долго. – ugoren

+0

@ugoren Спасибо, исправлено. – mizo

2

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

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

    20! = 2432902008176640000 

Существует!

Смежные вопросы