关于#for#的问题,如何解决?

#include<stdio.h>
int main()
{
int i,j,n,p,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
p=1;
for(j=1;j<=i;j++){
p=p*j;
}
sum=sum+p;
}
printf(%d",sum);
return 0;
}
输入20,正确结果应该是2561327494111820313,但这里输出的确是268040729,这是为什么?
这里不是求1!+2!+3!+到n!的吗?

int型被分配的是4个字节,32个Bite位,存储范围是-2^31到2^31-1,明显超出范围了,用long long型和unsigned long long型都行

超了吧,把p和sum声明为long long试试,然后输出printf用ld%

要用高精度加法和乘法来求,可以找篇文章看看