0

我为 Euler 项目问题 5 这样做了,但由于某种原因,我得到了一个浮点异常:

#include <iostream>
using namespace std;

int main ()
{
    long num;
    bool isnum = false;
    long i = 20;

    while (isnum == false)
    {
        for (int j = 0; j <= 20; j++)
        {
            if (i % j != 0)
            {
                break;
            }
            else
            {
                num = i;
                isnum = true;
            }
        }
        i+=20;
    }
    cout << num << endl;
    return 0;
}

我不明白的是,当我对输出非整数的代码不做任何事情时,怎么会出现浮点异常。

4

3 回答 3

8

我 % j

这里有一个除以零,因为 j 被初始化为 0。

于 2012-08-27T09:14:35.103 回答
3

由于您使用i % jwithj被初始化为零,因此根据 5.6 [expr.mul] 第 4 段,您会得到未定义的行为:

...如果 / 或 % 的第二个操作数为零,则行为未定义。...

例如,这可能会产生浮点异常。我也可以导致更糟糕的事情发生。

于 2012-08-27T09:18:15.503 回答
1

i % j在循环的第一次迭代中使用 j == 0 for

因此浮点异常。

于 2012-08-27T09:14:59.003 回答