我目前正在做作业,但无法弄清楚为什么我得到的输出不正确,这是作业说明:
级别1:首先编写一个程序,打印出不超过10,000的正整数(错误0)。每个数字应以单个空格分隔。例如,相当好100应该打印6 28。
级别2:扩展程序,以便可以将不良限制指定为第二个命令行参数。例如,prettygood 100 3将打印2 3 4 6 8 10 16 18 20 28 32 6
我目前在2级上遇到问题。
代码:
int calculateBadness (int candidate);
bool isDivisor (int factor, int candidate);
bool isDivisor (int factor, int candidate) {
if (candidate % factor == 0) {
return true;
} else {
return false;
}
}
int calculateBadness (int candidate) {
int total;
for (int factor = 2; factor < candidate; factor++) {
total = 1;
if (isDivisor (factor, candidate)) {
total += factor;
}
}
int badness = candidate - total;
return badness;
}
int main (int argc, char* argv []) {
const int limit = argc > 1 ? atoi (argv [1]) : 1000;
const int badnessLimit = argc > 2 ? atoi (argv [2]) : 0;
for (int candidate = 2; candidate < limit; candidate++) {
int badness = calculateBadness (candidate);
if (badness < badnessLimit) {
cout << candidate << endl;
}
}
}
在输入被询问时(非常好100 3),我不断得到输出
2
3
感谢您的帮助:)
答案 0 :(得分:1)
看起来您刚刚放错了total
变量的初始化位置,应该是
int calculateBadness (int candidate) {
int total = 1;
for (int factor = 2; factor < candidate; factor++) {
if (isDivisor (factor, candidate)) {
total += factor;
}
}
int badness = candidate - total;
return badness;
}
通常,将声明与初始化结合起来是一个好主意。而不是在一个地方声明然后在另一个地方初始化。