这是哪个地方出了问题啊

题目是求1!到n!的和,要求定义使用fact函数

#include<stdio.h>
double fact(int n){
int i;
double b;
if(n<0){
return 0;
}b=1;
for(i=1;i<=n;i++){
b=b*i;
}
return b;}
int main()
{
int i,a;
double sum;
scanf("%d",&a);
sum=0;
for(i=1;i<=a;i++){
sum=sum+fact(i);
}printf("sum = %d",sum);

}
#include<stdio.h>
double fact(int n){
int i;
double b;
if(n<0){
return 0;
}b=1;
for(i=1;i<=n;i++){
b=b*i;
}
return b;}
int main()
{
int i,a;
double sum;
scanf("%d",&a);
sum=0;
for(i=1;i<=a;i++){
sum=sum+fact(i);
}printf("sum = %d",sum);

}请问这个程序哪里有问题啊,改不对了

代码没什么问题,最后输出里,sum 是double ,输出用%d 肯定不对了,改为:printf("sum = %.0f",sum);//printf("sum = %d",sum);
另就是这个n!,这里 n 选择多大呢,13!就超出整形的范围了,虽然用了double ,也很快就超了。


#include <stdio.h>
int main()
{
    int n,sum=0,temp=1;
    printf("请输入一个n,该程序会帮你计算 1!+2!+3!+4!+5!+...+n!:\n");
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        temp=temp*i;
        sum=sum+temp;
    }
    printf("结果是:%d",sum);
    return 0;
}

我这里还有一个,之前我们的作业,要写一个时间复杂程度为O(n)的【手动狗头】


#include  <stdio.h>
int fact(int n);
int factsum(int n);
int main()
{
    int n;
    printf("请输入一个n,该程序会帮你计算 1!+2!+3!+4!+5!+...+n!:\n");
    scanf("%d",&n);
    printf("结果是:%d",factsum(n));
    return 0;
 } 
int fact(int n)
{
    int result;
    if (n == 1 || n == 0)
    {
        result = 1;
    }
    else
    {
        result = n * fact(n - 1);
    }
    return result;
}
int factsum(int n)
{
    int sum;
    if (n == 1)
    {
        sum = 1;
    }
    else if (n == 0)
    {
        sum = 0;
    }
    else
    {
        sum = fact(n) + factsum(n - 1);
    }
    return sum;
}

宝,改不对,就先来看看我的