C 总和系列阶乘

C++ sum series factorial

本文关键字:阶乘 系列      更新时间:2023-10-16

我们应该得到一个总和系列,但我遇到了一个问题。

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

我的循环不正确,我不知道为什么答案应该是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;}
  1. 您使用两个循环来计算总和,而串联总和可以通过一个循环计算。那应该是一个危险信号。

  2. 另外,您正在使用整数部门。这会给您带来错误的结果。

使用:

#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;
}

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

来完成。
 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

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

#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';
}

使用两个循环无法达到您的目的,因为内部循环将被重复多次,就像外循环指定一样。在您的情况下,您将得到:

   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  

但是,您需要ij并行工作如下:

#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 << "nn Sum is " << sum;
}

还请注意,int/int将导致int。例如:9/24。因此,您需要将操作数之一转换为float才能获得float结果。

有不同的方法可以解决您到目前为止看到的这个问题。当您使用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;
}