求n的阶乘,为什么输入21答案是负的。

#include
int main()
{
int n,i;
int a=1;
n<=21;
scanf("%d",&n);
for(i=1;i<=n;i++){a=a*i;}
printf("product = %d",a);
return 0;
}

因为溢出了,改为double类型吧

int n,i;
double a=1;
scanf("%d",&n);
for(i=1;i<=n;i++){a=a*i;}
printf("product = %.0lf",a);
return 0;
}