【发布时间】:2021-12-13 14:33:59
【问题描述】:
我有一个函数素因数分解,但它的工作很奇怪,我不知道如何使它正确。 如果 2 或 3 是重复因子,则应通过 'x' 打印因子并写成 2^(power) 或 3^(power)。
我的输出:2 >> 22^2 | 6 >> 2 x 3^2 | 8 >> 22^22^3 | 9 >> 3 x 3^2.
如何更改此代码以使其正常工作。
注意:我已经在 main() 中声明如果 num == 1:打印 1。
void prime_factors(int num)
{
int power = 0;
for (int factor = 2; num > 1; ++factor)
{
while (num % factor == 0)
{
if (factor >= 3 && power >= 1)
printf(" x %d", factor);
else
printf("%d", factor);
num /= factor;
++power;
if (power >= 1)
{
printf("^%d", power);
}
}
}
}
【问题讨论】:
-
选择一个不太容易分解的小数,例如 12=2^2 x 3^2 和 60: 2^2 x 3 x 5 并尝试在您的代码后面加上纸页和一支铅笔。你应该很快意识到这是错误的,为什么......
-
我马上就看到了一个问题:在
factor循环的每次迭代开始时,您永远不会将power重置为 0。对于这样一个简单的程序,您可以轻松地尝试一个简单的失败案例并手动浏览代码以查看会发生什么。 -
谢谢。现在我离正确答案有点近了,但还有一些事情要做
标签: c function factorization