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 有什么区别,详细一点。。 展开
题目是这样的,我编程是这样的:
#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 有什么区别,详细一点。。 展开
展开全部
把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语言
展开全部
int和long分配的内存空间长度不一样,表示的数值范围不一样。比如可能int有32位的空间,long有64位的空间。
n=17超出了整数的表示范围
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
http://blog.csdn.net/xuexiacm/article/details/8122267
这里面有介绍int 和long型的数据表示范围,17的阶乘已经很大了,超过了他们的表示范围
这里面有介绍int 和long型的数据表示范围,17的阶乘已经很大了,超过了他们的表示范围
更多追问追答
追问
为什么还会出现0呢?
还有在已经定义了n为int的情况下
输入很大的一个n时,会有什么结果
追答
可能会出现负数吧,因为int型的第一位是符号位
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sum
已经超出了32767,定义为无符号长整形。。
已经超出了32767,定义为无符号长整形。。
追问
32767是什么呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询