C++质因数分解实现:如何将分解结果输出在同一行
质因数分解结果同行输出的解决方案
你希望质因数分解的结果能在同一行输出,比如:
392 = 2^3 * 7^2
但当前代码会在每次找到新的质因数时换行,输出变成:
392 = 2^3 392 = 7^2
现有代码
#include <iostream> int main() { int n, dig, num, i, val; do { std::cout << "Enter a number greater than one: "; std::cin >> n; } while (n <= 1); i = 2; val = 0; num = n; do { dig = num % i; if (dig == 0) { do { num = num / i; dig = num % i; val = val + 1; } while (dig == 0); std::cout << n << " = " << i << "^" << val << std::endl; } val = 0; i = i + 1; } while (num != 1); return 0; }
修改后的代码
#include <iostream> int main() { int n, dig, num, i, val; bool first_factor = true; // 标记是否是第一个质因数 do { std::cout << "Enter a number greater than one: "; std::cin >> n; } while (n <= 1); i = 2; val = 0; num = n; // 先打印开头的固定部分,只输出一次 std::cout << n << " = "; do { dig = num % i; if (dig == 0) { do { num = num / i; dig = num % i; val = val + 1; } while (dig == 0); // 非第一个质因数前添加分隔符 if (!first_factor) { std::cout << " * "; } // 打印当前质因数和指数 std::cout << i << "^" << val; first_factor = false; } val = 0; i = i + 1; } while (num != 1); // 所有质因数输出完成后再换行 std::cout << std::endl; return 0; }
修改说明
- 提取固定前缀:把
n =移到循环外部,避免每次找到质因数都重复输出整行前缀。 - 控制分隔符:用布尔变量标记第一个质因数,第一个因数前不加分隔符,后续每个因数前添加
*来连接。 - 调整换行时机:移除原代码中每次打印后的换行,改为所有因数输出完毕后统一换行,保证结果在同一行。
内容的提问来源于stack exchange,提问作者MattexD
相关产品推荐
相关产品推荐

