我坚持使用这个非常简单的C ++程序,在那里我让用户知道她/他输入的数字是否为素数,但是,由于某些原因,在第一次循环中一切正常但事情变得可疑在第二个。如果有人能提供帮助,我会非常高兴吗?
#include <iostream>
using namespace std;
int main(int argc, const char* argv[])
{
int number1 = 5;
int number;
int a = 0;
while (number1 == 5)
{
int b = 1;
cout << "Enter your number and we'll tell you if it's prime or not: ";
cin >> number;
while (a <= number)
{
a++;
if (number % a == 0)
b++;
}
if (b == 3)
cout << "Your number is prime" << endl;
else
cout << "Your number is not prime" << endl;
}
}
答案 0 :(得分:2)
您的计划有几个问题。
第一个是以语句
开头的循环while (number1 == 5)
是无限的,因为number1
在循环中没有改变。
第二个是你必须始终在循环中将变量a
初始化为零。它也应该在循环中定义,因为它不在循环外使用。这同样适用于变量number
。
考虑到一个数字是素数,如果它可以除以1和它自己(数字1除外)。所以我最初将变量b
设置为零并将其与2进行比较。比将其与3进行比较更为明确。
程序可以按以下方式查看
#include <iostream>
int main()
{
while ( true )
{
std::cout << "Enter your number and we'll tell you if it's prime or not (0-exit): ";
unsigned int number = 0;
std::cin >> number;
if ( number == 0 ) break;
unsigned int n = 0;
unsigned int divisor = 0;
while ( divisor++ < number )
{
if ( number % divisor == 0 ) n++;
}
if ( n == 2 )
std::cout << "Your number is prime" << std::endl;
else
std::cout << "Your number is not prime" << std::endl;
}
}
答案 1 :(得分:1)
你错过了在内心之前重新启动a
到0
。
这使它有效。但是,我建议您花时间学习编码。它看起来没有受过教育。
此外,您的计划也不会退出。不确定你的意图是什么,但你可以省略number1
变量并简单地使用while(1)
(考虑到你的代码原样;可能你正处于开发的开始,所以它取决于)。
#include <iostream>
using namespace std;
int main(int argc, const char* argv[])
{
int number1 = 5;
int number;
int a = 0;
while (number1 == 5)
{
int b = 1;
cout << "Enter your number and we'll tell you if it's prime or not: ";
cin >> number;
a = 0; <-- Reset to 0 would make it work
while (a <= number)
{
a++;
if (number % a == 0)
b++;
}
if (b == 3)
cout << "Your number is prime" << endl;
else
cout << "Your number is not prime" << endl;
}
}
P.S。:您是StackOverflow的新手。所以你很可能会得到答案并逃脱。请考虑接受答案。当它解决了你的问题时,这是一种尊重的做法。