当前位置:编程学习 > C/C++ >>

c语言急!!!! 求S=1+1/(2!)+1/(3!)+…的前一百项之和

只要速度!!!
追问:能告诉我运行结果吗??
答案:楼上的算出来结果比我的大,主要是因为他用double 来声明的,有效位数比long float少,而且用浮点数的时候本来就会有误差,所以用一个整型的分母比较精确点! 
# include <stdio.h> 
main() 
{ long float s=0; 
int n=1, deno=1 ;/*deno 是分母*/ 
do 
{ 
s=s+(long float)1/deno; /*(long float)是强制类型转换,如果不转换的话 1/deno的结果为0*/ 
deno=deno*(deno+1); 
n++; 
} 
while(n<=100) ; 

printf("%lf\n",s) ; 
getch(); 
} 
我运行过了,如果有什么问题HI我!

对了这里的long float 等同于double 是旧版本里的表示方法!
其他:这个不用算,100的阶乘用什么数据类型都不行,只能用高精度。另外,这个公式再加1就等于自然对数e,所以这个式子等于e-1=1.718281828
不用算前一百项,算个十几项就约等于这个数了 #include<stdio.h>

int main(){
    double i,s,l;
    s=0;l=1;
    for(i=1;i<=100;i++){
 l/=i;
 s+=l;
    }
    printf("%lf\n",s);
    getchar();
    return 0;
} 楼上看清楚了,分母是n的阶乘啊!你写的程序也未免太简单了 吧!这个应该是求不出来的,会溢出!!
int main()
{
double i;
double sum=0;
double a=1;
for(i=1;i<=100;i++)
{
 a=a*i;
 sum=sum+1/a;
}
cout<<sum<<endl;
} 给,已经编译运行确认:
#include<conio.h> 
#include<stdio.h> 

#define N 100 
int main(int argc, char* argv[]) 
{ 
double e=1,t=1; 
int t1; 
for (t1=2;t1<=N;++t1) 
{ 
t*=(double)1/t1; 
e+=t; 
} 
printf("%lf",e); 

getch();
return 0; 
} 

运行后的结果:
1.718282 #include<stdio.h> 

int main()
{
 double result =0;
 for(int i=1;i<=100;i++)
 result += a(i);
 printf("%lf",result);
 getch();
 return 0;
}

double a(int n)
{
 double a =1;
 for(int i=1;i<=n;i++)
 {
  a = a*i;
 }
 double result = 0;
 result = 1/a;
 return result;
} #include<stdio.h>
void main ()
{
double i,j;
for(i=1,j=1;i<=100;i++)
{i=i*(i+1);
 j=j+1/i;
}
printf("%f",j);
}
我运行了一下,可以用。 # include <stdio.h> 
main() 
{ long float s=0; 
int n=1, deno=1 ;
do 
{ 
s=s+(long float)1/deno; 
deno=deno*(deno+1); 
n++; 
} 
while(n<=100) ; 

printf("%lf\n",s) ; 
getch(); 
} #include<stdio.h>
int main(void)
{
    float result=0;
    int i,j;
     long sum=1;
    for(i=1;i<=100;i++)
    {
         for(j=1;j<=i;j++)
         {
                   sum*=j;
        }   
       result+=(float)1/sum; 
       sum=1;  
     }
    printf("s=%f",result);
    return 0;
} 1 # include <stdio.h> 
main() 
{ double s=0, temp=1;
int i=1 ;
do 
{ 
temp/=i;
if(temp==0)               //增加零的判定,其实用不到100项,temp就已经为0,可以跳出循环了
     break;
s+=temp;
i++;
} 
while(i<=100) ; 

printf("%lf\n",s) ; 
} 

上一个:C语言题目 那位高手帮忙做一下??
下一个:什么是c语言 它有什么用。能干什么?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,