如标题所示,如何计算表单n
数字的总和:1+(1/2!)+...+(1/n!)
?
我已经得到了谐波系列的代码:
#include <stdio.h>
int main( void )
{
int v=0,i,ch;
double x=0.;
printf("Introduce un número paracalcular la suma: ");
while(scanf("%d",&v)==0 || v<=0)
{
printf("Favor de introducir numeros reales positivos: ");
while((ch=getchar())!='\n')
if(ch==EOF)
return 1;
}
for (i=v; i>=1; i--)
x+=1./i;
printf("EL valor de la serie es %f\n", x);
getch();
return 0;
}
这里的问题是:我已经将总和作为分数,但我如何计算变量“i”阶乘?
注意:我用C语言编程,使用DEV -C ++ 4.9.9.2
答案 0 :(得分:2)
如果$ n $大于20美元左右,$只需使用数学常数$ e。$ $ 20以下,$无论你做什么都无关紧要。
答案 1 :(得分:1)
通常通过递归方法,可以创建阶乘函数。注意: $$ N! = \ left \ { \开始{阵列} {LR} 1&amp; :n = 1 \\ N(N-1)! &安培; :n&gt; 1 \ {端阵列} \对。 $$
我想这意味着类似
public int Factorial(int n)
{
return (n == 1 ? 1 : n * Factorial(n - 1));
}
答案 2 :(得分:0)
ac = 1; for(i = n; i> 0; i--)ac = ac / i + 1;
保存阶乘计算并避免舍入误差。
答案 3 :(得分:0)
没有递归,没有因子。
double fraction=1, sum=0;
long i,n;
for(i=1;i<=n;i++)
sum+=(fraction/=i);
输出:
n=1
sum=1
n=2
sum=1.5
n=3
sum=1.666666666
n=1073741824
sum=1.71828182845904553488480814849026501178741455078125