好数字

时间:2019-03-13 09:52:21

标签: c++

我目前正在做作业,但无法弄清楚为什么我得到的输出不正确,这是作业说明:

级别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

感谢您的帮助:)

1 个答案:

答案 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;
}

通常,将声明与初始化结合起来是一个好主意。而不是在一个地方声明然后在另一个地方初始化。