我正在按照以下条件进行作业:
任务:
“完美”数字是一个等于其除数之和的整数 (其中1被视为除数)。例如6是完美的,因为它的 除数分别为1、2和3,1 + 2 + 3为6。类似地,28是完美的,因为 等于1 + 2 + 4 + 7 + 14。 “非常好的”数字是一个整数,其“坏”的大小为 除数之和与数字本身之差–不是 大于指定值。例如,如果最大不良度设置为 3,有12个“非常好”的数字小于100:2、3、4、6、8、10、16、18, 20、28、32和64; 您的任务是编写一个相当不错的C ++程序, 小于指定值的指定最大严重性的数量。极限值 执行程序时,将最大和最大错误指定为命令行参数。
第一个问题如下:
通过编写一个程序来打印正整数(错误0),最大数值小于 10000,以单个空格分隔。例如,挺好100应该打印628。
我在这里做了什么
#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 3264。
问题是,如何获得在代码中使用的“第二个命令行参数”?
注意:如果有帮助的话,我们需要在Unix终端(cygwin)上针对自动标记系统测试代码。
希望这是足够的信息,如果不是,这很令人困惑, 谢谢。
答案 0 :(得分:-1)
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main(int argc, char** argv)
{
int n = 10000;
int badnessLimit = 0;
if (argc > 1) {
istringstream nArg(argv[1]);
if (!(nArg >> n) || !nArg.eof()) {
cerr << "Invalid first argument\n";
return 1;
}
}
if (argc > 2) {
istringstream badnessArg(argv[2]);
if (!(badnessArg>> badnessLimit) || !badnessArg.eof()) {
cerr << "Invalid second argument\n";
return 2;
}
}
cout << " n = " << n << '\n';
cout << "badnessLimit = " << badnessLimit << '\n';
return 0;
}