2012-12-16 86 views
0

我需要寫一個程序,「長整型總和(INT N)」,這和這樣的值的總數:值總數 - 總和

1! − 2! + 3! − ... ± n!

我成功的與寫總和爲:

1-3 + 5 - ... ± (2n + 1) 

float sum (int n) { 
int max = 2*n +1, i = 1, sum = 0, ch = 2; 

for (i = 1; i <= max; i+2;){ 
    if ((ch%2) == 0){ 
     sum += i; 
    } 
    else{ 
     sum = sum - i; 
    } 
    ch++; 
    return sum; 
} 

但我不知道/有一個想法如何使它爲一個階乘總和。

+2

作出階乘函數,並調用它爲每個n –

+0

您還需要更改循環運行從1到n的步驟1 – stuartd

回答

1

製作另一個做階乘因子和一個做交替序列總和的函數是很有用的。 。 。

int factorial(int n) 
    { 
     int sum = 1; 
     if (n > 0) 
      for (int i = n; i > 1; --i) 
       sum *= i; 
     else if (n <= 0) 
      return 0; 

     return sum; 
    } 

    int alernatingSeriesSum(int nStart) 
    { 
     if(nStart < 1) return 0; 
     int sum = 0; 
     for(int i=1; i<nStart; ++i) 
      sum += (factorial(i) * ((i%2)==0 ? -1 : 1)); //multiply -1 if its an even #s 
     return sum; 
    } 

階乘是非常簡單的,由值,減量乘以一個並重復,直到達到1

的altnerating系列和類同,它要求達到迭代因子(此時除索引增加),並且每次索引爲偶數時,通過乘以-1來創建交替符號。這是我們如何生產1! - 2! + 3! - 4! +。 。 。 +(n + 1)! - (n + 2)!

我希望有幫助。 。 。

如果你不能把它分成函數,試着把它全部寫在一個主函數中。 。 。我在C中測試了這個代碼,它工作。隨意使用代碼並嘗試閱讀每行代碼。祝你好運。

+0

嗯......也將實現它在主?我遇到麻煩了... –

+0

你在用什麼語言? C#或C++? – rbtLong

+0

我正在使用它...在Ansi C :) –

1

將其分爲兩個功能。取而代之的

sum += i; 

sum = sum - i; 

嘗試:

sum += factorial(i); 

sum = sum - factorial(i) 

其中階乘是一些方法計算階乘:

long int factorial(int n) { 
    long int fact = n; 
    while (n > 1) { 
     n--; 
     fact *= n; 
    } 

    return fact; 
}