嘿伙计们我正在做一个额外的学分计划,我让它运行,但我使用它的每一个输入总是最终为1.任何人都可以指出我正确的方向,我搞砸了,谢谢你
#include<stdio.h>
#include<math.h>
#define Euler 2.718282
#define Pi 3.141593
int main(void)
{
int n;
int n_fact(int n);
printf("Enter n: ");
scanf_s("%d", &n);
while (n < 0)
{
printf("The n value must not be negative");
printf("Enter the value of n: ");
scanf_s("%d", &n);
}
printf("n! Stirling approximation value about %i is %i ", n, n_fact(n));
getchar();
getchar();
return 0;
}
int n_fact(int n)
{
if (n == 0)
{
return 0;
}
else
{
return (int)(1 + 1 / (12 * Euler) + 1 / (288 * n*n) - 139 / (51840 * n*n*n));
}
}
答案 0 :(得分:2)
由于整数运算,特别是整数除法,你在这里遇到了问题:
return (int)(1 + 1 / (12 * Euler) + 1 / (288 * n*n) - 139 / (51840 * n*n*n));
你也错过了the formula的一个重要部分,所以即使使用浮点除法,上面的表达式仍然不会返回正确的值。
再看一下这个系列:
为了评估这一点,你需要(a)在整个过程中使用浮点数;(b)你还需要包含sqrt(2 * pi * n) * pow(n / e, n)
项。但是,您可以省略除系列的前几个术语之外的所有术语,这取决于所需的准确性(显然,您的作业只需要使用前四个术语)。