0

我正在尝试编写一段代码,它将获取数字,比如说 24 并获取它的所有因子,以便打印数字 1 和 24、8 和 3 等。我自己尝试过这样做,但是我还很新使用 c++ 所以这让我有点困惑。如果这真的很容易或很容易回答,我深表歉意。你能告诉我这是怎么做到的吗?

int y = 0;
int x = 0;
int product = x * y;

while (true)
{
    product = x * y;
    x++;
    y++;
    if (product == 24)
    {
        cout << x << " " << y << endl;
    }
}

那是我尝试使用的代码,但我意识到由于 x 和 y 同时增加,它永远不会达到 24 作为产品。

4

4 回答 4

1

这是一个快速的代码片段:

for (int i = 1; i <= n; ++i) { 
    if (n % i == 0) {
        std::cout << i;
    }
}

请注意,它没有优化。

于 2012-12-10T23:42:10.470 回答
1

而不是y++,尝试y = 24 / x。刚开始x1而不是零!

所以:

x++;               // do this first, so x isn't zero
y = 24 / x;       // get closest y, rounding down
product = x * y; // see if it works
if (product == 24)
  ...
于 2012-12-10T23:43:55.123 回答
1

您应该从相反的方向开始 x 和 y。(即 x=1 和 y=24)并将它们彼此靠近,直到达到中位数(即 12)。例如

  1. x=1 y=24 --> 产品=24,
  2. x=1, y=23 --> 产品=23<24 所以 x++
  3. x=2, y=23 --> 产品=46>24 所以 y--
  4. x=2, y=22 --> 产品 ...

你所问的比 C++ 更具算法性。

于 2012-12-10T23:58:53.300 回答
0

您将希望从 1 循环到该数字;如果您正在测试的数字,以您当前的循环索引为模,则为 0,那么它是一个因素。

这很容易翻译成代码。这里有一个提示: % 是模运算符。

如果某个特定的步骤让您绊倒,请随时在此处提问。但请先尝试翻译上述内容。

于 2012-12-10T23:42:07.880 回答