C语言编写程序求和sum=-1!+2!-3!+4!…+n! 其中n由用户输入,其正负号由其奇偶性决定,n<=12。

C语言编写程序求和sum=-1!+2!-3!+4!…+n! 其中n由用户输入,其正负号由其奇偶性决定,n<=12。

连续乘就可以得到阶乘了啊。奇偶判断正负

#include <stdio.h>
int main()
{
    int n,i,flag = -1;
    long long k=1,sum=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        k*=i;
        sum += k*flag;
        flag *= -1;
    }
    printf("%lld",sum);
    return 0;
}

写个计算阶乘的函数即可,不需要math.h
代码如下:

#include <stdio.h>
long long jc(int n)
{
    long long s=1;
    int i=1;
    for (i=1;i<=n;i++)
    {
        s*=i;
    }
    return s;
};

int main()
{
    long long sum = 0;
    int i,flag = -1;
    int n;
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    {
        sum += flag * jc(i);
        flag = -flag;
    }
    printf("%lld",sum);
    return 0;
}

#include <stdio.h>
long long calc(int num){
if(num==1){
return 1;
}else{
return num*calc(num-1);
}
}
int main(){
    int i,n;
    long long sum=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        if(i%2==1){
            sum-=calc(i);
        }else{
            sum+=calc(i);
        }
        
    }
    printf("sum的值是:%lld\n",sum);
    return 0;
}

float fact(float n)
{
    float res = 1.0f;
    while(n) res *=n--;
    return res;
}

int main()
{
    int n;
    float res=0.f;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        if(i%2)
            res += -fact(i);
        else
            res += fact(i);
    }
    printf("%f",res);

    return 0;
}
 

不能使用<math.h>

为了提高效率, 我建议打表:

#include <stdio.h>
#define    MAX_N    12

int main(int argc, char** argv) {
    int ans[MAX_N] = {
        -1, 1, -5, 19,
        -101, 619, -4421,
        35899, -326981, 3301819,
        -36614981, 442386619,
    };
    printf("Input a number n (1 <= n <= 12):\n");
    int n = 0;
    while (1 == scanf("%d", &n)) {
        if (1 > n || n > MAX_N) {
            printf("Wrong input!\n");
            continue;
        }
        printf("Sum(%d)= %d\n", n, ans[n - 1]);
    }
    return scanf("%*s%*s");
}