2011-12-25 81 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 – 2011-12-25 14:56:22

回答

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

的問題是在這裏,用正確的符號來表示的無符號long long類型值

嘗試:

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

變量facunsigned long long類型。正確的格式說明這種類型是爲%llu

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

你的修復是正確的,解釋不是。問題沒有簽署/未簽名,但會很長時間。 – ugoren 2011-12-25 15:01:15

+0

@ugoren謝謝,修正。 – mizo 2011-12-25 15:03:41

2

您正確地計算,但印刷錯誤!使用%llu:

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

    20! = 2432902008176640000 

有!