Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;带嵌套循环的完全数问题_C++_Loops_Nested_Boolean_Perfect Numbers - Fatal编程技术网

C++ C++;带嵌套循环的完全数问题

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

我想做的是寻找一个完美的数字。 一个完美的数字是它的所有除数之和,比如6=1+2+3

基本上,我在这里做的是要两个数字,然后在这两个数字之间找到一个完美的数字。我有一个测试可除性的函数和两个嵌套循环

我的问题是我没有得到任何结果。我已经修改过了&似乎没有发现任何错误。编译器不会排除任何错误

有什么不对劲

#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
    是非常量但从未修改过?