我试图使用一个循环来逼近C中的欧拉数,当两个连续的e值之间的差值小于0.0000001时,该循环终止。我得到的值是2.99 ..我尝试设置它,以便每次迭代时,e将与其自身的先前值(在e1中保持)进行比较,如果差值大于0.0000001,则将添加另一个项1 /( N!)。问题是什么?我是编程新手,所以任何建议/评论都会受到赞赏。
#include <stdio.h>
int main()
{
float e1 = 0, e2 = 1;
int n = 1, nfact;
while ((e2 - e1) > 0.0000001)
{
e1 = e2;
nfact = 1;
for (int count = 1; count < n; count++)
{
nfact = n * count;
}
n = n + 1;
e2 = e1 + (1.0 / nfact);
}
printf("Approximated value of e = %f", e2);
return 0;
}
答案 0 :(得分:1)
这不是你如何计算数字的阶乘:
for (int count = 1; count < n; count++)
{
nfact = n * count;
}
请注意,您始终在每次迭代时将nfact
分配给n*count
的值,从而删除nfact
的先前值。这段代码相当于:
nfact = n*(n-1);
因为它是count
的最后一个值。
我想你想要这个:
nfact = n;
for (int count = n-1; count > 0; count--)
{
nfact = nfact * count;
}
答案 1 :(得分:1)
nfact = 1;
for (int count = 1; count < n; count++)
{
nfact = n * count;
}
不会计算n!
nfact每次迭代都会获得一个全新的值。
当然你的意思是
nfact = 1;
for (int count = 2; count <= n; count++)
{
nfact *= count;
}