而循环逻辑澄清+谐波系列

时间:2015-03-06 22:20:11

标签: c++ loops while-loop

这是我找到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;
}

1 个答案:

答案 0 :(得分:4)

您的循环实际上正在运行。但是,您的sum变量的类型为intdivisor也是。{/ p>

1(int)/除数(也是int)将返回1或0.这是因为您正在进行整数除法。 1/1 == 1。但是,1/2 == 01/3 == 0等......要解决此问题,请将除数加倍:

(1 / (double)divisor)

这样就解决了该段仅返回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并且正在递增...如果你确实想要一个{{{ 1}},将>= 15条件更改为...

while

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

while (sum < 15)