计算和1+(1/2!)+ ... +(1 / n!)

时间:2014-01-14 23:29:25

标签: c algorithm factorial

如标题所示,如何计算表单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

4 个答案:

答案 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