2012-12-16 87 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; 
}