C语言 编程计算1!+2!+3!+…+20!。出现的问题

#include <stdio.h>
void main()
{
long t=1,s=0;
int n;
for(n=1;n<=20;n++)
{
t*=n;
s+=t;
}
printf("1!+2!+....+20!=%ld\n",t);
}
这个是我自己编的程序,按照我自己的思路运行,当n=1--19时程序都没有错误,但是就是当n=20程序的答案就是错误的了,我不知道错在哪里。还有我有这段程序的正确答案#include <stdio.h>
void main( )
{
float s=0,t=1;
int n;
for(n=1;n<=20;n++)
{
t=t*n;
s=s+t;
}
printf("1!+2!+....+20!=%e\n",s);
}
就是我不想用老师给的程序,想自己知道为什么我用long时运行到20程序结果就是错误的了,而且s和t我也不想用float.请好心人解答下,谢了。图片是当N=20时的运行结果,我试了,当N<=1到19结果都可以。就是n=20结果就是负数了

printf("1!+2!+....+20!=%ld\n",t);

%ld 是以双精度浮点型输出, 不知道你是否为你的笔误,输出的应该是  s 吧.

用断点调试可以看到: 在进行第14次运算的时候,s的值已经为负,说明s的值已经超越了long的最大值,

而你输出的是 t ,表面上看n=19时输出的是正值,好像是正确的,其实 t 的值在第17次运算时已经不正确了.

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-06
计算结果溢出了,20! = 2432902008176640000 ,超过了long能表示的最大值。
老师让你们计算20!,就是想让你们体验一下溢出的结果。
在累乘的过程中,如果乘到二进制最高位(符号位)为1的时候,就成了负数了。
第2个回答  2011-01-06
#include <stdio.h>
void main()
{
long t=1,s=0;
int n;
for(n=1;n<=20;n++)
{
t*=n;
printf("%d:\t%d\n",n,t);//其实数据早就溢出了
s+=t;
}
printf("1!+2!+....+20!=%ld\n",s);//怎么输出的是t
}本回答被提问者采纳
第3个回答  2011-01-06
float类型的数据范围比long的大。。。
第4个回答  2011-01-06
printf("1!+2!+....+20!=%ld\n",t);
把t换成s试试呢???

C语言 编程计算1!+2!+3!+…+20!。出现的问题
printf("1!+2!+...+20!=%ld\\n",t);ld 是以双精度浮点型输出, 不知道你是否为你的笔误,输出的应该是 s 吧.用断点调试可以看到: 在进行第14次运算的时候,s的值已经为负,说明s的值已经超越了long的最大值,而你输出的是 t ,表面上看n=19时输出的是正值,好像是正确的,其实 t 的值在...

编程计算1!+2!+3!+…+20!的结果
如图

计算1!+2!+3!...+20!的数值 我的C程序哪里错了
理论上没什么错,只是sum是int类型,而仅仅是20!就等于2432902008176640000,远远超出了int类型的最大值,所以结果你只能使用数组之类的来存储

用C语言编写求和s=1!+2!+3!+...+n!
{ t*=n;s+=t;} printf("1+2!+3!...+20!=%e\\n",s);}

用C语言编程求出1!+2!+3!+……+20!的值
以下是用C语言编程求出1!+2!+3!+……+20!的值示例代码 include<stdio.h> int main(){ int i,j;long sum,k;sum=0;for(i=1;i<=20;i++){ k=1;for(j=1;j<=i;j++){ k=k*j;} sum=sum+k;} printf("1+2!+3!+…+20!=%d",sum);} ...

C语言中如何求1!+2!+3!+……
以下是用C语言编程求出1!+2!+3!+……+20!的值示例代码:include <stdio.h> int main(){ int i,j;long sum,k;sum=0;for(i=1;i<=20;i++){k=1;for(j=1;j<=i;j++){ k=k*j;} sum=sum+k;} printf("1+2!+3!+…+20!=%d",sum);} ...

编程计算多项式的值,s=1!+2!+3!……+20!
*2=2!,...,第20次就是19!*20=20!,jc*=i;由于20!数据比较大,对于32bit的int型变量存放不下,可以考虑用double型数据计算,省得溢出。因此程序主体算法为:int i;double s,jc;s=0; jc=1;for ( i=1;i<=20;i++ ) { jc*=i; s+=jc; } printf("%lf\\n",s);

计算1!+2!+...+20!的c语言程序
include <stdio.h> void main () { int i,j;double n=1,sum=0;for (i=1;i<=20;i++) { n=1;for (j=1;j<=i;j++) { n=n*j;} sum=sum+n;} printf ("%.0lf\\n",sum);}

求1!+2!+...+20!=的C语言编程
以下是一个可能的 c语言代码:include <stdio.h> int main(){ double sum = 0; \/\/ 定义和 double fac = 1; \/\/ 定义阶乘 for (int i = 1; i <= 20; i++) \/\/ 循环从 1 到 20 { fac *= i; \/\/ 计算阶乘 sum += fac; \/\/ 累加和 } printf("1!+2!+...+20! = %e\\...

用C语言编程计算1!+2!+……+20!=
include <stdio.h>int main(){double k=1,s=0,i;for(i=1;i<=20;i++){k*=i;s+=k;}printf("1!+2!+3!+...+20!= %lf\\n",s);} C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环...

相似回答