c++ - 代码意外地给出了无限循环

标签 c++ loops

最近开始学习C++,我写了一个简单的程序来定义给定数是否为质数,当输入为零时,它结束。但是我不小心注意到,当输入介于2100000000和2200000000之间时,它会创建一个无限循环。我不知道为什么会发生这种情况,请您向我解释一下?

#include <iostream>

using namespace std;

int number, i, k;

int main()
{
    do
    {
        cin >> number;
        if (number == 0)
            break;
        for (i = 2; i < round(sqrt(number)) + 1; i++)
            if (number % i == 0)
                k++;
        if ((number == 1) || (k > 0))
            cout << "This number is not prime\n";
        else
            cout << "This number is prime\n";
        k = 0;
        i = 0;
    } while (!(number == 0));
}

最佳答案

该值溢出其类型(int),最大值为2147483647,并导致 undefined 的行为。如果您需要接受大量数字作为输入,则可能必须使用long long。另外,为什么还要检查number是否等于0两次?

#include <iostream>
#include <math.h>

int main()
{
    while(true)
    {
        long long number;
        bool isPrime = true;
        std::cin >> number;
        if(number == 0)
            break;
        for (int i = 2; i < round(sqrt(number)) + 1; i++)
        {
            if (number % i == 0)
            {
                isPrime = false;
                break;
             }
        }

        if (isPrime)
             std::cout << "This number is prime\n"; //<== print this is this case
        else
             std::cout << "This number is not prime\n";
    }
    return 0;
}

关于c++ - 代码意外地给出了无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64431950/

相关文章:

c++ - 右值如何取消引用?

c++ - ETL 文件合并失败 (0x80071069)(标志 : 0x0000001f)

c++ - 从 GLU Tesselator 接收 GLU_TESS_ERROR_5

java - 扫描仪无限循环导致浏览器挂起

jquery - 如何为每组元素运行一个 jQuery 方法

c++ - 取消引用运算符不起作用(语法问题?)

excel - "Object Variable or With Block Variable not Set"

python - 修改当前代码

javascript - 两次调用 javascript 函数的问题

c++ - 单击标题栏按钮时,全局低级鼠标钩子(Hook)会导致卡住