#include < stdio.h >
int factorial ( int );
int main()
{
double e[10] = { 0 };
int n , i;
printf ( "n e\n- -----------\n" );
for ( n = 0 ; n < 10 ; n++ )
{
for ( i = 0 ; i <= n ; i++ )
{
if ( n == 0 )
{
e[n] = (double) 1 / factorial ( i );
}
else //使用已经计算好的结果,避免重复运算。e[n] = e[n-1] + (double) 1 / factorial ( i )
{
e[n] = e[n-1] + (double) 1 / factorial ( i );
}
}
if ( n <= 2 )
{
printf ( "%d %g\n" , n , e[n] );
}
else
{
printf ( "%d %0.9f\n" , n , e[n] );
}
//%g用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),
//且不输出无意义的0。即%g是根据结果自动选择科学记数法还是一般的小数记数法。
/* %0.10g行不通,当n=8时,它输出的小数点位数为8位,很叛逆,我不懂为什么。
查了半天好像没有既能精确到小数点后9位又能省掉无意义的0的输出方法,都是通过判断情况换不同的输出格式。
哼,因为个破输出搞了好久,还被WA两次,哼。*/
}
return 0;
}
int factorial ( int i ) //返回i的阶乘
{
int result = 1;
if ( i == 0 )
{
result = 1;
return result;
}
else
{
result = i * factorial ( i-1 );
}
return result;
}
11-28
1662
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交