C语言编程问题:求 1!+2!+3!+...+n! 30

编程:求1!+2!+3!+...+n!,要求n的值由键盘输入。题目是这样的,我编程是这样的:#include<stdio.h>main(){intn,i,x=1,sum=... 编程:求 1!+2!+3!+...+n! ,要求n的值由键盘输入。
题目是这样的,我编程是这样的:
#include<stdio.h>
main()
{
int n,i,x=1,sum=0;
printf("n=");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
x*=i;
sum+=x;
}
printf("1!+2!+...+%d!=%d",n,sum);
}

最后运行的时候,发现,当n取小一点的数的时候,比如3,4之类的,结果正确。
但是当n=17时,输出结果为负数
当n取更大数的时候,结果就为0了
请问问题出在哪里。。希望详细解答,在告诉我怎么改。。刚上C语言。。比较笨。。耐心一点
还有一个问题是int 和 long 有什么区别,详细一点。。
展开
 我来答
帐号已注销
2020-11-21 · TA获得超过77万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:162万
展开全部

把sum=sum+x;移到}后、x=1;前。

int main(void){

int sum,n,x,t;

scanf("%d",&n);

for(sum=0,x=t=1;t<=n;sum+=x*=t++);

printf("%d\n",sum);

return 0;

}

扩展资料:

C的数据类型包括:整型(short,int,long,long long)、字符型(char)、实型或浮点型(单精度float和双精度double)、枚举类型(enum)、数组类型、结构体类型(struct)、共用体类型(union)、指针类型和空类型(void)。

变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。

参考资料来源:百度百科-c语言

dagewxw
2015-04-08 · TA获得超过5928个赞
知道大有可为答主
回答量:3523
采纳率:67%
帮助的人:962万
展开全部
int和long分配的内存空间长度不一样,表示的数值范围不一样。比如可能int有32位的空间,long有64位的空间。
n=17超出了整数的表示范围
更多追问追答
追问
那为什么会显示负数
还有int可以表示几个数字,long可以表示几个数字呢?
追答
这跟编译器的实现方式有关,还与机器的位数有关。
比如一个机器用8位表示整型,表示的范围是-128~127(-2^7 ~2^7 -1).
同理可以计算32位整型的情况。
如果超出了这个范围比如128,有的编译器处理的方式就是 -128.类似于一个环,129存储成 -127.
long也是这个规律。但是c语言只保证long不小于int,32位机器上long也是32位的跟整型是一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-04-08
展开全部
把int改成float, 把%d换成%f,float比int算的数位多,更大的数用double和%lf
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d585d01
2015-04-08 · TA获得超过670个赞
知道小有建树答主
回答量:339
采纳率:0%
帮助的人:468万
展开全部
http://blog.csdn.net/xuexiacm/article/details/8122267
这里面有介绍int 和long型的数据表示范围,17的阶乘已经很大了,超过了他们的表示范围
更多追问追答
追问
为什么还会出现0呢?
还有在已经定义了n为int的情况下
输入很大的一个n时,会有什么结果
追答
可能会出现负数吧,因为int型的第一位是符号位
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友af6bb57
2015-04-08 · TA获得超过537个赞
知道小有建树答主
回答量:789
采纳率:100%
帮助的人:223万
展开全部
sum
已经超出了32767,定义为无符号长整形。。
追问
32767是什么呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式