为什么会导致infinte循环?

时间:2017-01-14 18:08:30

标签: c++ loops

我是编码的新手,我的任务是通过将1 / n加起来增加'n'来使变量'sum'大于大于(不等于)m。

我需要解决两次相同的问题(一个使用for循环,一个使用while循环)。但两种方式都以infinte循环结束。

当我将“< =”替换为“<”时,我的代码工作正常。但是那个

有人可以帮助我吗?

#include <iostream>
using namespace std;

int main () {
unsigned int m = 1;
double sum = 0;
long n;
n = 1;
while (sum <= m) //THIS LINE
{
    double sumsum = 1/n;
    sum += sumsum;
    n++;
}


cout << "n = " << n << endl ;
cout << "sum = " << sum << endl ;

return 0;
}

1 个答案:

答案 0 :(得分:0)

1/n的{​​{1}}类型为n并且值为long的展示> 1将始终产生0,因为您使用整数类型进行操作。因此,sum将在第一次运行时被分配1,但永远不会达到值> 1,因为总是会0添加{。}}。

将您的代码更改为

    double sumsum = 1.0/n;

它应该有效。请注意1.0强制使用浮点运算。