2014-01-14 143 views
0

就像標題所說,我怎麼能計算n數字形式的總和:1+(1/2!)+...+(1/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

ac = 1; (i = n; i> 0; i--)ac = ac/i + 1;

保存階乘的計算並避免舍入錯誤。

1

通常通過遞歸方法,可以創建一個階乘函數。請注意: $$ n! = \ left \ { \ begin {array} {lr} :n = 1 \\ n(n-1)! &:n \ end {array} \ right。 $$

我想這將意味着像

public int Factorial(int n)  
{ 
     return (n == 1 ? 1 : n * Factorial(n - 1)); 
} 
+0

爲$ n $的值很大,這應該是通過對數完成,因爲存儲的整數位是不夠的,也更容易產生錯誤。此外,爲了使代碼快得多,對於$ n $的大值,可以使用斯特林的逼近達到非常高的精度。 – 2014-01-15 00:05:22

2

爲$ n $的比約爲20 $更大,$只是用數學常數$即$低於$ 20,$真的沒有按」不管你做什麼。

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