C++习题,请求支援

课堂留的实验题目,做出来的总是不对,需要定义三个函数,一个计算阶乘,一个计算s1,一个计算s2

img

long int s(int n)
{
    int i;
    long int s = 1;
    for (i = 1; i <= n; i++)
    {
        s *= i;
    }
    return s;
}

long int s1(int n)
{
    int i;
    long int s = 0;
    for (i = 1; i <= n; i++)
    {
        int j = 1;
        long int s1 = 1;
        for(j = 1; j <= i; j++)
        {
            s1 *= j;
        }
        s += s1;
    }
    return s;
}

long int s2(int n)
{
    int i;
    long int s = 0;
    for (i = n; i >= 1; i--)
    {
        int j = 1;
        long int s1 = 1;
        for(j = 1; j <= i; j++)
        {
            s1 *= j;
        }
        if(s == 0)
        {
            s = s1;
        } 
        else
        {
            s -= s1;
        }
    }
    return s;
}

#include <stdio.h>
long int factorial(int n)
{
    long int ret = 1;
    int i;
    for(i=n;i>0;i--)
    {
        ret *= i;
    }
    return ret;
}
long int handles1(int n)
{
    long int ret = 0;
    int i;
    for(i=n;i>0;i--)
    {
        ret += factorial(i);
    }
    return ret;
}
long int handles2(int n)
{
    long int ret = factorial(n);
    int i;
    for(i=(n-1);i>0;i--)
    {
        ret -= factorial(i);
    }
    return ret;
}
int main()
{
    long int s = factorial(5);
    long int s1 = handles1(5);
    long int s2 = handles2(5);
    printf("s=%ld  s1=%ld   s2=%ld\n",s,s1,s2);
    return 0;
}