修复C语言质因数分解函数的异常输出格式问题
问题分析
你的代码存在4个核心逻辑错误,直接导致输出异常:
power变量作用域错误:全局只声明了一个power变量,遍历每个新质因数时没有重置,会继承上一个质因数的计数结果- 输出逻辑放在了内层while循环里:每除一次质因数就输出一次内容,同一个质因数会被重复打印多次,比如分解8的过程中会连续打印3次2和对应幂次
- 连接符判断逻辑错误:仅判断
factor>=3才加连接符x,无法适配第一个质因数大于2的场景,也无法正确区分是否是第一个输出的质因数 - 幂次输出逻辑错误:只要power>=1就打印
^%d,不符合幂次为1时仅输出质因数本身的需求,且每次循环都打印幂次,会导致内容重复拼接
修正后代码
void prime_factors(int num) { // 标记是否是第一个输出的质因数,用来控制连接符打印 int first_factor = 1; for (int factor = 2; num > 1; ++factor) { int power = 0; // 先统计完当前factor的所有幂次 while (num % factor == 0) { num /= factor; power++; } // 只有当前factor确实是质因数(幂次>0)才输出 if (power > 0) { // 不是第一个质因数先打印连接符 if (!first_factor) { printf(" x "); } first_factor = 0; // 输出质因数 printf("%d", factor); // 幂次大于1才输出^幂次 if (power > 1) { printf("^%d", power); } } } }
效果验证
和你给出的错误示例对应,修正后输出符合预期:
- 2 >> 2
- 6 >> 2 x 3
- 8 >> 2^3
- 9 >> 3^2
内容的提问来源于stack exchange,提问作者sznailc
相关产品推荐
相关产品推荐

