如何消除C++质因数分解程序末尾的多余*符号?
解决质因数分解末尾多余
*的问题 你的核心问题是每个质因数输出后都无条件追加了*,完全没考虑是否是最后一个因子,导致末尾多出符号。下面是具体的修复方案:
修改思路
用一个布尔标志位控制*的输出逻辑:
- 第一个质因数直接打印,不前置
* - 后续每个质因数先打印
*,再输出因子内容 - 同时清理代码中多余的
*打印语句,补充遗漏的剩余质因数处理逻辑
修改后的primeOp函数代码
int primeOp(int a) { int i, x, power; bool first_factor = true; // 标记是否为第一个输出的质因数 x = a; if (a % 2 == 0) { power = 0 ; while (a % 2 == 0) { a /= 2; power++; } // 非第一个因子时先输出* if (!first_factor) { cout << "*"; } cout << 2 << "^" << power; first_factor = false; // 更新标志位 } for (i = 3; i <= x / 2; i += 2) { power = 0 ; while (a % i == 0) { a /= i; power++; } if (power != 0) { if (!first_factor) { cout << "*"; } cout << i << "^" << power; first_factor = false; } // 删除原代码中多余的*打印语句 } // 处理输入本身是质数的情况 if (a == x) { cout << x << "^" << 1; } // 处理分解后剩余的大于2的质因数(比如15分解3后剩下5) else if (a > 1) { if (!first_factor) { cout << "*"; } cout << a << "^" << 1; } return 0; }
关键改动说明
- 新增标志位
first_factor:初始为true,输出第一个质因数后改为false,后续所有因子都先打印*再输出内容 - 删除冗余代码:原循环中
if (power!=0 && a%i== 0) cout << "*";这行逻辑错误,会额外多打*,直接删除 - 补充剩余质因数处理:比如分解15时,循环只处理到i=7,剩下的5不会被循环覆盖,新增
else if (a > 1)分支输出这个剩余质因数
测试输入24时,输出会变成24 = 2^3*3^1,符合预期。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

