C编程因子输出错误的值

Woo*_*ung 2 c factorial

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;
}
Run Code Online (Sandbox Code Playgroud)

从14开始!到20!输出错误的值.

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

Sha*_*fiz 8

printf ("%2i! = %ld\n", i, fac);
Run Code Online (Sandbox Code Playgroud)

问题出在这里,对unsigned long long类型值使用正确的表示法

尝试:

printf ("%2i! = %llu\n", i, fac);
Run Code Online (Sandbox Code Playgroud)