C++ C++;带嵌套循环的完全数问题
我想做的是寻找一个完美的数字。 一个完美的数字是它的所有除数之和,比如6=1+2+3 基本上,我在这里做的是要两个数字,然后在这两个数字之间找到一个完美的数字。我有一个测试可除性的函数和两个嵌套循环 我的问题是我没有得到任何结果。我已经修改过了&似乎没有发现任何错误。编译器不会排除任何错误 有什么不对劲C++ C++;带嵌套循环的完全数问题,c++,loops,nested,boolean,perfect-numbers,C++,Loops,Nested,Boolean,Perfect Numbers,我想做的是寻找一个完美的数字。 一个完美的数字是它的所有除数之和,比如6=1+2+3 基本上,我在这里做的是要两个数字,然后在这两个数字之间找到一个完美的数字。我有一个测试可除性的函数和两个嵌套循环 我的问题是我没有得到任何结果。我已经修改过了&似乎没有发现任何错误。编译器不会排除任何错误 有什么不对劲 #include <iostream> using namespace std; bool isAFactor(int, int); int main() { int star
#include <iostream>
using namespace std;
bool isAFactor(int, int);
int main()
{
int startval;
int endval;
int outer_loop;
int inner_loop;
int perfect_number = 0;
cout << "Enter Starting Number: ";
cin >> startval;
cout << "Enter Ending Number: ";
cin >> endval;
for(outer_loop = startval; outer_loop <= endval; outer_loop++)
{
for(inner_loop = 1; inner_loop <= outer_loop; inner_loop++)
{
if (isAFactor(outer_loop, inner_loop) == true)
{
inner_loop += perfect_number;
}
}
if (perfect_number == outer_loop)
{
cout << perfect_number << " is a perfect number." << endl;
}
else
{
cout << "There is no perfect number." << endl;
}
}
system("PAUSE");
return 0;
}
bool isAFactor(int outer, int inner)
{
if (outer % inner == 0)
{
return true;
}
else
{
return false;
}
#包括
使用名称空间std;
布尔因子(int,int);
int main()
{
int startval;
内端点;
int外环;
内环;
完整整数=0;
cout>startval;
cout>endval;
对于if语句后的(外部_循环=startval;外部_循环):
cout << perfect_number;
cout << outer_loop;
if (perfect_number == outer_loop)
{
cout << perfect_number << " is a perfect number." << endl;
}
cout内部循环+=完美循环;
应该是完美循环+=内部循环;
还有其他问题--您需要在每个外部循环中将完美数字
重置为零,并且您应该打印消息“没有完美数字。”
如果范围内的数字都不完美,而不是为范围内的每个不完美数字打印一次
我建议您将perfect\u number
重命名为sum\u factors
,outer\u loop
重命名为candidate\u perfect\u number
和inner\u loop
或类似名称。噢,问题太多了
变量perfect\u number
从未更改。编译器是否标记
这个
当外部循环退出时,它将比结束值多出一个;
你知道吗
您不需要将bool
值与true
或false
进行比较
您可以将isAFactor
函数简化为返回(外部%
内部)==0;
您可以用表达式替换对isAFactor
的调用
((外部%内部)=0)
您尝试过使用调试器吗?您正在将字符串读入int值。这不起作用。您必须读入字符数组,然后转换第一个字符进入整数。@SethBattin:试试提问者的代码,你会发现其中的一部分是好的。另外,perfect_number
每次通过外部循环时都需要重置。(1)是错误,(2)是好的(至少,提供endval!=INT_MAX,这是一个棘手的问题),(3)和(4)是应该清理但不停止程序工作的冗余代码,(5)是一个问题,从哲学上讲,您是否觉得子程序是一件好事:-)事实上,我认为这段代码可以从更多不同的函数中受益,而不是从更少的函数中受益。顺便问一下,我需要什么编译器选项来获得未被修改的perfect_number
的警告?这是一个相当繁琐的编译器,要提醒您标记它const
。为什么在main
中警告perfect_number
,而不是(比如说)isAFactor
中的outer
是非常量但从未修改过?