int main ()
{ double jingdu,e;
double a=0,b=1,c,d=0,i;
scanf("%lf",&jingdu);//输入精度
for (i=1;i>jingdu;)//先把条件放在一边架构好整个算法结构
{ a=1+a;//a=1 a=2 a=3
b=b*a;//b=1 b=1*2 b=2*3
c=1/b;//c=1! c=2! c=3!
d=c+d;//d=1!+0 d=2!+1! d=3!+2!
i=c;//i=1/n 实现条件控制
}
e=d+1;//e=1+1/1!+1/2!+…1/n!
printf("%.10lf",e);//保留10位小数
}
/*数学常量 e 的值可以用一个无穷级数表示: e = 1 + 1/1! + 1/2! + 1/3! + ...
当n很大时,通项 1/n!会很小,因此,在计算中可以认为通项1/n! 小于等于给定的精度以后的项可以忽略。*/
下面是我用for while do…while写的东西
//我的for循环
/*
int main ()
{ double jingdu,e;
double a=0,b=1,c,d=0,i;
scanf("%lf",&jingdu);
for (i=1;i>jingdu;)
{ a=1+a;
b=b*a;
c=1/b;
d=c+d;
i=c;
}
e=d+1;
printf("%.10lf",e);
}*/
//我的do while
/*int main ()
{ double jingdu,e;
double a=0,b=1,c,d=0,i;
scanf("%lf",&jingdu);
do
{ a=a+1;
b=b*a;
c=1/b;
d=d+c;
i=c;
} while(i>jingdu);
e=1+d;
printf("%.10lf",e);
}
*/
//我的while
int main()
{
double jingdu,e;
double a=0,b=1,c,d=0,i=1;
scanf("%lf",&jingdu);
while(i>jingdu)
{ a=a+1;
b=b*a;
c=1/b;
d=d+c;
i=c;
}
e=1+d;
printf("%.10lf",e);
}
//个人认为使用for和do…while 比较好写