大一C语言小白,1至20的阶乘求和的编译问题?

图片说明

编译结果怎么样才能得出2561327494111820313?

看了网上有说改int为long int的,结果还是不对。用的编译器是VS2019。求老哥解答。

没仔细看,但是打印语句有问题,换成

printf("%ld\n", s);

int main(){
double sum =0;
double i = 1;
double h = 1;
for(;i<=20;i++){
h=h*i;
sum+=h;
}
printf("%.20lg\n", sum);
}

打印长整型有符号用%ld,无符号用%lu 

算法不对吧 1!+2!+3!...20!不是这么个算法吧

试试这个,刚才做了一道这种改错题,应该是对的

#include <stdio.h>
void main( )
{      float fun( int n )  ;
    int  m ;
    float  s=0.0 ;
    for(m=1;m<=20;m++)
        s+= fun(m)  ;
    printf("s=1!+2!+3!+...+20!=%f\n",s);
}
float fun( int n )
{
    int i;
    float z=1;
    for(i=1;i<=n;i++)
        z=   z*i  ;//求阶乘
    return z   ;
}