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!输出错误的值。

它要么给出一个负数,要么这个数字不够大..有什么问题?

4

3 回答 3

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

问题就在这里,对 unsigned long long 类型值使用正确的符号

尝试:

printf ("%2i! = %llu\n", i, fac);
于 2011-12-25T14:57:57.267 回答
2

变量fac的类型为unsigned long long。此类型的正确格式说明符是%llu

printf ("%2i! = %llu\n", i, fac);
于 2011-12-25T14:58:24.713 回答
2

您计算正确但打印错误!使用 %llu :

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

  20! = 2432902008176640000

那里!

于 2011-12-25T15:01:55.620 回答