最近开始学习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/