C++ 调试主程序
我正在做一个程序,确定一个数是否为素数。编译时我没有收到任何错误,但输出不正确。谁能告诉我哪里出了问题(以及如何修复它?)C++ 调试主程序,c++,primes,C++,Primes,我正在做一个程序,确定一个数是否为素数。编译时我没有收到任何错误,但输出不正确。谁能告诉我哪里出了问题(以及如何修复它?) #定义提示“请输入整数:” #定义非素数“数字不是素数!” #定义素数“数字是素数” #定义完成0 #定义第一个系数3 使用std::cout; 使用std::cin; int main(){ int i; 字符数; 数量; 对于(i=FIRST_FACTOR;i我不确定为什么在代码中循环两次,您可以将其更改为 if (number % 2 == 0) prime = fa
#定义提示“请输入整数:”
#定义非素数“数字不是素数!”
#定义素数“数字是素数”
#定义完成0
#定义第一个系数3
使用std::cout;
使用std::cin;
int main(){
int i;
字符数;
数量;
对于(i=FIRST_FACTOR;i我不确定为什么在代码中循环两次,您可以将其更改为
if (number % 2 == 0) prime = false;
for (i = 3; i <= sqrt(number) && prime; i+=2)
if (number % i == 0) prime = false;
if(数字%2==0)prime=false;
对于(i=3;i我不确定为什么在代码中循环两次,您可以将其更改为
if (number % 2 == 0) prime = false;
for (i = 3; i <= sqrt(number) && prime; i+=2)
if (number % i == 0) prime = false;
if(数字%2==0)prime=false;
对于(i=3;i而言,最大的问题是程序在应该打印i
时总是打印number
if(prime){
cout << i << PRIME << endl;
}
else{
cout << i << NOT_PRIME << endl;
}
if(prime){
cout最大的问题是,当程序应该打印i
时,它总是打印number
if(prime){
cout << i << PRIME << endl;
}
else{
cout << i << NOT_PRIME << endl;
}
if(prime){
您的问题是:
- 数字应为整数或无符号整数
- 第二个for循环没有意义
- 您的控制流非常复杂,请简化
我认为解决方案应该是这样的:
#include <iostream>
int main() {
std::cout << "Please enter a whole number: " << std::endl;
unsigned int number;
std::cin >> number;
for (unsigned int i = 2; i * i < number; i++) {
if(number%i == 0) {
std::cout << "The number is not a prime number! " << std::endl;
return 0;
}
}
std::cout << "The number is a prime number " << std::endl;
return 0;
}
#包括
int main(){
std::cout数;
for(无符号整数i=2;i*i
- 数字应为整数或无符号整数
- 第二个for循环没有意义
- 您的控制流非常复杂,请简化
我认为解决方案应该是这样的:
#include <iostream>
int main() {
std::cout << "Please enter a whole number: " << std::endl;
unsigned int number;
std::cin >> number;
for (unsigned int i = 2; i * i < number; i++) {
if(number%i == 0) {
std::cout << "The number is not a prime number! " << std::endl;
return 0;
}
}
std::cout << "The number is a prime number " << std::endl;
return 0;
}
#包括
int main(){
std::cout数;
for(无符号整数i=2;i*i std::cout我假设您应该循环两次,以便继续请求新条目,直到它们输入0为止
#define PROMPT "Please enter a whole number: "
#define NOT_PRIME " is not a prime number! "
#define PRIME " is a prime number "
using std::cout;
using std::cin;
int main(){
int number;
bool prime;
while (true)
{
prime = false;
cout << PROMPT;
cin >> number;
if (number == 0) break;
int MaxPossibleFactor = (int)(sqrt(number) + 1);
if ((number % 2) == 0)
{
prime = true;
}
else
{
for (int i=3; i<=MaxPossibleFactor; i += 2)
{
if ((number % i) == 0)
{
prime = true;
break;
}
}
}
if (prime)
{
cout << number << PRIME << endl;
}
else
{
cout << number << NOT_PRIME << endl;
}
}
return 0;
}
#定义提示“请输入整数:”
#定义非素数“不是素数!”
#定义素数“是一个素数”
使用std::cout;
使用std::cin;
int main(){
整数;
布尔素数;
while(true)
{
素数=假;
数量;
如果(数字==0)中断;
int MaxPossibleFactor=(int)(sqrt(数字)+1);
如果((数字%2)=0)
{
prime=true;
}
其他的
{
对于(inti=3;i我假设您应该循环两次,以便继续请求新条目,直到它们输入0为止
#define PROMPT "Please enter a whole number: "
#define NOT_PRIME " is not a prime number! "
#define PRIME " is a prime number "
using std::cout;
using std::cin;
int main(){
int number;
bool prime;
while (true)
{
prime = false;
cout << PROMPT;
cin >> number;
if (number == 0) break;
int MaxPossibleFactor = (int)(sqrt(number) + 1);
if ((number % 2) == 0)
{
prime = true;
}
else
{
for (int i=3; i<=MaxPossibleFactor; i += 2)
{
if ((number % i) == 0)
{
prime = true;
break;
}
}
}
if (prime)
{
cout << number << PRIME << endl;
}
else
{
cout << number << NOT_PRIME << endl;
}
}
return 0;
}
#定义提示“请输入整数:”
#定义非素数“不是素数!”
#定义素数“是一个素数”
使用std::cout;
使用std::cin;
int main(){
整数;
布尔素数;
while(true)
{
素数=假;
数量;
如果(数字==0)中断;
int MaxPossibleFactor=(int)(sqrt(数字)+1);
如果((数字%2)=0)
{
prime=true;
}
其他的
{
对于(int i=3;i你的算法没有意义。外循环是干什么的?你不应该检查number%n
?数字应该是int
而不是char
。你应该更喜欢const std::string
,const int
等。你的算法没有意义。你的外循环是什么oop for?您不应该检查number%n
?数字应该是int
而不是char
。您应该更喜欢const std::string
,const int
等。我认为程序应该检查number
是否为素数,因此输出在该上下文中是有意义的。t但是,i
上的外循环对我来说似乎很奇怪和错误。@CarlNorum看起来该程序需要遍历从3到number
的数字,并打印哪些是素数,哪些不是。是的,算法看起来就是这样做的,但这与提示和OP的第一个d不匹配描述:“…这个程序确定一个数是否为素数。”我认为程序应该检查number
是否为素数,因此输出在该上下文中是有意义的。I
上的外部循环对我来说似乎很奇怪和错误。@CarlNorum看起来程序应该检查从3到number
的数字,并打印哪些是素数,哪些是素数不是。是的,算法看起来就是这样做的,但这与提示和OP的第一个描述不匹配:“……这个程序确定一个数字是否为素数。”