
c程序求1!+2!+3!+4!+...+20!。
感觉代码没错,可以结果不正确,结果是-2102132736,感觉不是这么小#include<stdio.h>intmain(void){ints,i,sum=0;s=1;...
感觉代码没错,可以结果不正确,结果是-2102132736,感觉不是这么小
#include<stdio.h>
int main(void)
{
int s,i,sum=0;
s=1;
for(i=1;i<=20;i++)
s*=i;
sum+=s;
printf("%ld\n",sum);
} 展开
#include<stdio.h>
int main(void)
{
int s,i,sum=0;
s=1;
for(i=1;i<=20;i++)
s*=i;
sum+=s;
printf("%ld\n",sum);
} 展开
14个回答
展开全部
用int绝对是不行的,20!的结果是会超出int的上限的
而且long类型和int类型,在不同的编译器中表示的范围是不一样的。有的编译器里long与int表示的是同一个范围,都是用32为存储的。
建议用long long 或者unsigned long long 来进行存储,输出时用"%I64d"。不过我还试了一下double类型,貌似也不行呀。假如是特别大的数据,可以用字符串进行模拟,当然本题目是不用的。
#include <stdio.h>
#include<math.h>
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你用的int,存不下那么大的数,要用double.另外你的for循环没用{ },要把两句扩起来,不然for循环的范围只到第一个分号就结束了,后面的sum+=s没有被循环到
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你计算过程都搞错了,
for(i=1;i<=20;i++)
s*=i;
sum+=s;
怎么可能是算
1!+2!+3!+4!+...+20!
这样只能算出20!
#include <stdio.h>
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;
}
更多追问追答
追问
没有吧,算的就是1!+2!++++20!
追答
你还不理解么?你这里的算法一个循环能算出1!+2!+3!+4!+...+20! ????
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
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型记得添加返回值
}
追问
运算过答案好小
追答
// 不好意思之前未验证,现在是完整的代码
#include <stdio.h>
int main(void)
{
int i, j;
long sum = 0;
long s = 1;
for(i = 1; i <= 10; i++) // 你如果不知道什么时候溢出就先定义10,然后再加
{
// 每次计算还原s的值
s = 1;
// 这样才是算的阶乘
for (j = 1; j <= i; j++)
{
s*=j;
}
// 这里可以看到具体情况
printf("%d! = %ld\n", i, s);
// 再累加和
sum += s;
}
printf("the sum = %ld\n",sum);
return 0; // main函数为int型记得添加返回值
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询