c程序求1!+2!+3!+4!+...+20!。

2025-04-07 18:22:03
推荐回答(5个)
回答1:

#include
int main(void)
{
int s,i,sum=0;
s=1;
for(i=1;i<=20;i++)
{s*=i;
sum+=s;} //for需要包含这两句
printf("%ld\n",sum);
}
这个程序是大数问题。20的阶乘是一个很大的数
程序我给你改后事没有问题,但是这个是因为溢出了,所以成为负数,要是long long int 还装不下,那么你就要考虑用字符串来解决了

回答2:

用int绝对是不行的,20!的结果是会超出int的上限的

而且long类型和int类型,在不同的编译器中表示的范围是不一样的。有的编译器里long与int表示的是同一个范围,都是用32为存储的。


建议用long long 或者unsigned long long 来进行存储,输出时用"%I64d"。不过我还试了一下double类型,貌似也不行呀。假如是特别大的数据,可以用字符串进行模拟,当然本题目是不用的。

#include 
#include
int main()
{
    long long i, sum, s;
    // double i, sum, s;
    s = 1;
    sum = 0;
    for(i=1; i<=20; i++)
    {
        s *= i;
        sum += s;
    }
    printf("%I64d\n", sum);

    return 0;
}

回答3:

首先你用的int,存不下那么大的数,要用double.另外你的for循环没用{ },要把两句扩起来,不然for循环的范围只到第一个分号就结束了,后面的sum+=s没有被循环到

回答4:

你计算过程都搞错了,

for(i=1;i<=20;i++)
s*=i;
sum+=s;

怎么可能是算

1!+2!+3!+4!+...+20!

这样只能算出20!


#include 
double factorial(int num)
{
int i;
double dResult = 1.0;

for(i = 1; i <= num; ++i)
{
dResult *= i;
}
return dResult;
}
int main()
{
double dSum = 0.0;
int i;
for(i = 1; i <= 20; ++i)
{
dSum += factorial(i);
}
printf("The 20's factorial is %lf\n", dSum);
return 0;
}

回答5:

#include 
int main(void) 
{
    int i, j;
    long sum=0;
    long s=1; 
    for(i=1;i<=10;i++) // 你如果不知道什么时候溢出就先定义10,然后再加
    {
       // 这样才是算的阶乘
       for (j = 1; j <= i; j++)
       {
           s*=j;
       }
       // 再累加和
       sum += s;
    } 
    printf("%ld\n",sum);
    return 0; // main函数为int型记得添加返回值
}