gpt4 book ai didi

c++ - 在 C++ 中使用 For 循环查找质数

转载 作者:搜寻专家 更新时间:2023-10-31 02:23:42 25 4
gpt4 key购买 nike

这是我在这里的第一篇文章,所以我希望我做的一切都是正确的。

我最近的编程挑战有点问题。目标是让用户输入一个数字,并让程序输出 0 和输入的数字之间的所有质数。我的策略是让 for 循环对从 1 到输入的数字之间的每个数字进行简单检查,方法是将其除以前面的每个数字,直到循环达到 1。如果在检查中的任何一点,程序遇到一个数字,该数字分为循环当前所在的号码,循环的该部分将“中断”并继续下一个号码。如果除数达到 1,则程序将成功确定没有任何东西可以均分原始数并将该数输出为素数。

我是编程新手,但我认为我使用 break 的方式有问题。编译程序时,它只打印输入的原始数字,没有其他内容。但是,我已经检查以确保我所有的整数和循环都在工作。关于我上述问题的任何帮助,或者如果我可以使我的代码更高效或“正确”,我们将不胜感激。

#include "stdafx.h"
#include <iostream>

int _tmain()
{
using namespace std;
int iUserInput;
cin >> iUserInput;

for(;iUserInput > 0; iUserInput--)
{
int iDivisor = iUserInput - 1;
for (; iDivisor > 0; iDivisor--)
{
if (iUserInput%iDivisor == 0)
break;
if (iDivisor == 1)
cout << iUserInput << endl;
}
}


return 0;
}

最佳答案

以下部分:

if (iDivisor == 1)
cout << iUserInput << endl;

位置错误。您需要将其放在内部循环的外部:

for(;iUserInput > 0; iUserInput--)
{
int iDivisor = iUserInput - 1;
for (; iDivisor > 0; iDivisor--)
{
if (iUserInput%iDivisor == 0)
break;
}
if (iDivisor == 1)
cout << iUserInput << endl;
}

其他观察:

  • #include "stdafx.h" 在这里完全没有必要。将其删除。
  • int _tmain() 不是标准的。让它成为 int main() 并确保它像这样编译。
  • iUserInput 是匈牙利表示法。将其视为 90 年代失败的 Microsoft 实验,在现代 C++ 中完全无用。调用变量 userInput
  • 更改userInput 变量的值可能会影响代码的可读性。毕竟,用户输入在输入后不会改变。考虑对 userInput 的拷贝进行倒计时,例如for(int count = userInput; count > 0; count--)
  • 也让您的其他 for 循环更紧凑:for (int divisor = userInput - 1; divisor > 0; divisor--)
  • 对于刚开始学习 C++ 的人来说可能太高级了,但是您应该尝试处理非法用户输入,例如有人输入“X”而不是数字。您可以在每次输入操作后检查 std::cin 的状态,以查看最后一次操作是否成功。否则,您的程序可能会出现未定义的行为。

关于c++ - 在 C++ 中使用 For 循环查找质数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28996992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com