【发布时间】:2018-07-26 08:34:48
【问题描述】:
我正在从事一项符合以下标准的作业:
任务:
“完美”数是等于其除数之和的整数 (其中 1 被视为除数)。例如,6 是完美的,因为它 除数是 1、2 和 3,而 1 + 2 + 3 是 6。同样,28 是完美的,因为 它等于 1 + 2 + 4 + 7 + 14。 一个“相当好”的数字是一个整数,它的“坏”—— 它的除数之和与数字本身之间的差异 - 不是 大于指定值。例如,如果最大坏度设置为 3、小于100的“相当不错”的数字有12个:2、3、4、6、8、10、16、18, 20、28、32 和 64; 你的任务是编写一个 C++ 程序,非常好,它决定了 小于指定值的指定最大不良数。极限值 执行程序时将最大坏度指定为命令行参数。
第一个问题是这样问的:
首先编写一个程序,打印完美数(坏度 0),直到小于 10000,由一个空格分隔。例如相当好 100 应该打印 6 28。
我在这里做了什么:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int candidate = 0;
int badness;
for(int i=2; i<10000; i++)
{ //Start for loop 1
for (int j = 1; j<i; j++)
{ //Start for loop 2
if (i % j == 0)
{
candidate += j;
}
} //End for loop 2
if(candidate %i ==0)
{ //Start of if 1
cout << i << endl;
} //End of if 1
candidate = 0;
} // End of loop 1
return 0;
}
但是第二个问题问的是:
扩展程序,以便可以将不良限制指定为第二个命令行参数。例如相当好 100 3 将打印 2 3 4 6 8 10 16 18 20 28 32 64。
问题是,如何接收“第二个命令行参数”以在我的代码中使用?
注意:如果有帮助的话,我们需要在 Unix 终端 (cygwin) 上针对自动标记系统测试我们的代码。
希望这是足够的信息,对不起,如果不是这一切都非常混乱, 谢谢。
【问题讨论】:
-
gnu.org/software/libc/manual/html_node/Getopt.html 解析命令行选项和/或参数,或者您可以使用 std::cin 设置参数。
-
您需要使用
argc和argv参数。你的老师在给你作业之前没有告诉你这件事吗? -
argc包含char*数组argv内的参数数量。因此,如果argc>2,您可以使用argv[2]访问您的额外参数。argv[0]始终存在并代表程序名称(通常是可执行文件的路径)。 -
这是很多细节只是为了询问命令行参数。 :)