用高精度计算出 S = 1! + 2! + 3! + \cdots + n!S=1!+2!+3!+⋯+n!

问题遇到的现象和发生背景 用高精度计算出 S = 1! + 2! + 3! + \cdots + n!S=1!+2!+3!+⋯+n!(
用代码块功能插入代码,请勿粘贴截图 #include

int main () {
int n,i,j,sum,S=0;
scanf("%d",&n);
sum=1;
for(i=n;i>=1;i--)
{for(j=i;j>=1;j--)
{
sum*=j;
}
S+=sum;}

    printf("%d",S);

}

运行结果及报错内容 结果很大。
我的解答思路和尝试过的方法 想通过双层循环控制阶乘与阶乘之和

sum每次用完记得重置一下


#include<iostream>
using namespace std;
int main()
{
    int n;
    unsigned long long S = 0, sum = 1;
    cin >> n;
    int i, j;
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= i; j++)
        {
            sum *= j;
        }
        S += sum;
        cout << sum << endl;
        sum = 1;
    }
    cout << S;
    return 0;
}