while循环逻辑澄清+调和级数

While loop logic clarification + harmonic series

这是我的代码,用于计算 1/n 的调和级数的和。我想让它在总和大于或等于15时停止,但是代码不能运行。谁能让我知道我做错了什么?它似乎遵循正确的 while 循环结构。谢谢!

#include <iostream>

using namespace std;

int main ()
{
    int divisor = 1;
    int sum = 1;
    while ((sum <= 15) && (divisor >=1))
    {
        sum = sum + (1/divisor);
        divisor++;
    }
    cout << "You need " << divisor << " terms to get a sum <= 15" << endl;
    return 0;
}

你的循环实际上是运行。但是,您的 sum 变量是 int 类型,divisor.

也是

1(一个 int)/除数(也是一个 int)将 return 1 或 0。这是因为你正在进行整数除法。 1/1 == 1。但是,1/2 == 01/3 == 0 等...要解决此问题,请将除数转换为 double:

(1 / (double)divisor)

这样就解决了该段 return 仅 1 或 0 的问题。但是,由于 sum 的类型为 int,您仍然会获得总和 1。尝试将 double 分配给 int 变量将导致截断或四舍五入。 Sum 将添加第一个 1,但在那之后它会无限期地保持 1。为了解决这个问题,将 sum 的类型更改为 double.

您对 sum = 1; 的分配是一个逻辑错误。您的结果将比应有的高 1。你的输出语句也有误...应该是...

cout << "You need " << divisor << " terms to get a sum > 15" << endl;

此外,divisor >= 1 的条件是不必要的...它总是大于或等于 1,因为您将其分配为 1 并且正在递增...如果您确实想要一个总和>= 15,将while条件改为...

while (sum < 15)

您的代码应如下所示...

#include <iostream>

using namespace std;

int main()
{
    int divisor = 1;
    double sum = 0; //Changed the type to double and assigned 0 rather than 1

    while (sum <= 15) //While condition shortened...
    {
        sum = sum + (1 / (double)divisor); //Added type cast to divisor
        divisor++;
    }

    //cout statement adjusted...
    cout << "You need " << divisor << " terms to get a sum > 15" << endl;
    return 0;
}