C ++ sum系列阶乘

时间:2017-04-28 03:00:04

标签: c++ factorial

我们假设得到一个总和系列但我遇到了问题。

1 / n + 2 / n-1 + 3 / n-2 ... n / 1是她想要的总和

我的for循环不对,我无法弄清楚原因 答案是假设为8.70但我得到了27。

#include <iostream>
using namespace std;
int main()
{  

int n=5;
float sum=0;

    for(int i=1; i<=n; i++){
        for(int j =n; j>0; j--){
            sum += i/j;

        }
    }
   cout<<"Sum : "<<sum;}

5 个答案:

答案 0 :(得分:0)

  1. 您使用两个循环来计算总和,而序列总和可以通过单个循环计算。这应该是一面红旗。

  2. 此外,您正在使用整数除法。这会给你错误的结果。

  3. 使用:

    #include <iostream>
    using namespace std;
    int main()
    {  
       int n=5;
       float sum=0;
    
       for(int i=1; i <= n; i++)
       {
          sum += i*1.0f/(n - i + 1);
       }
    
       cout<<"Sum : "<<sum;
    }
    

答案 1 :(得分:0)

首先不需要有两个for循环,只能通过一个循环来完成

 int main(){

    float n=5; //need to declare as float otherwise the statement(i/n-1) will be 0 if declared as int
    float sum=0;


        for(int i=1; i<=n-1; i++){ //the loop should go to n-1 only otherwise denominator becomes 0 which makes it Infinity


                sum += (i/(n-i));

        }
        cout<<"Sum : "<<sum;
    }
}

我希望这也会怀疑地回答你的问题@isabella

答案 2 :(得分:0)

您也可以使用一些模板元编程来完成它。然后总和将没有运行时成本。

#include <iostream>

template < int n, int i = n >
struct sum
{
  static double value()
  {
    return i*1.0f/(n - i + 1) + sum<n, i-1>::value();
  }
};

template < int n >
struct sum < n, 0 >
{
  static double value() { return 0; }
};

int main()
{  
   std::cout << "Sum : " << sum<5>::value() << '\n';
}

答案 3 :(得分:0)

使用两个for循环不能满足您的需要,因为内循环将重复外循环指定的次数。在你的情况下,你会得到:

ObjectInputStream

但是,您需要 1/1 + 1/2 + 1/3 + 1/4 + 1/5 + 2/1 + 2/2 + 2/3 + 2/4 + 2/5 + 3/1 + 3/2 + 3/3 + 3/4 + 3/5 + 4/1 + 4/2 + 4/3 + 4/4 + 4/5 + 5/1 + 5/2 + 5/3 + 5/4 + 5/5 + 1/1 + 1/2 + 1/3 + 1/4 + 5/5 i并行工作,如下所示:

j

另请注意,#include <iostream> using namespace std; int main() { int n; float sum = 0; cout << "\n Enter n: "; cin >> n; for (int i = 1, j = n; i <= n; ++i, --j) { sum += (float)i/j; } cout << "\n\n Sum is " << sum; } 会产生int/int。例如:int9/2。因此,您需要将其中一个操作数转换为4以获得float结果。

答案 4 :(得分:0)

到目前为止,您已经找到了解决此问题的不同方法。当您使用C ++语言时,可以采用在打印十进制数字后使用“固定”数字的概念。

这是您的欲望问题的代码。

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{  
   int n=5;
   double sum=0,j = 1.00000;

   for(int i=n; i >= 1; i--)
   {
      sum += i*j/(n - i + 1);
   }

   cout<<" Sum : " << setprecision(1) << fixed << sum << endl;
}