首先,我在这里重新发明轮子。我知道欧拉数在 C 中有一个常数。因为我发现创建科学程序比任何其他类型的问题更容易,所以我使用这些问题来练习并成为一名优秀的开发人员。
/* calculating euler number */
#include <stdio.h>
int fat(int x);
int main(void)
{
int n; int y; double en = 1.0; //en = euler number
printf("Entre com o valor de n para a aproximação do número de Euler: \n");//prompt
scanf("%d", &n);//read n
//n big enough -> aproximation for en is close of real value of euler number
if (n < 0){ //if the user input a negative value
printf("Error!\n");
}
else {//if the user is not a troll and enter a positive integer
for (y = 1; y <= n; y++){
en = en + (1.0/(fat(y))); // en = summation(1/fat(y))
//printf("y = %d and en = %.9lf\n", y, en); this line is for studying when en return 'inf'
}
printf("O valor aproximado de e é aproximadamente %.9lf\n", en);//print euler number aproximation
}
}
int fat(int x){//defining the factorial function
int factorial = 1;
int f;
for (f = 1; f <= x; f++){
factorial = factorial * f;
}
return factorial;
}
我编译并运行了几次代码,我注意到近似值超过了欧拉值 n=19,en=2.718281835(最后两位应该是 28)。对于大于 33 的 n,程序返回 en = inf。可能是因为 34 的阶乘对我的代码来说已经太高了。
我的问题是:如何利用这段代码背后的思想,做出更优化的程序,比如不超过欧拉数的算法。
我知道,我的代码不是很好,但它是我设法构建的,除了一本关于如何获得欧拉数的数学书外,没有咨询任何东西。提前致谢!