C++程序输出数字从右到左质数位,用and连接避免末尾多余字符
解决方案
核心逻辑是避免每次输出数字后都拼接and,改为只有输出非第一个数字前拼接and,既可以用标志位实现流式输出,也可以先收集所有符合要求的质数位再统一输出。
方案1:标志位法(无需额外存储)
#include <iostream> using namespace std; int main() { int n, digit; cin >> n; // 标记是否为第一个输出的质数位 bool is_first = true; while (n > 0) { digit = n % 10; if (digit == 2 || digit == 3 || digit == 5 || digit == 7) { if (is_first) { cout << digit; is_first = false; } else { cout << " and " << digit; } } n = n / 10; } // 全部输出完成后统一换行 cout << endl; return 0; }
逻辑说明
- 第一个符合要求的质数位直接输出,不需要加前缀
- 从第二个质数位开始,先输出
and再输出数字,自然完成多元素的连接,不会在末尾产生多余的and - 移除了原代码中每次输出后的
endl,保证所有内容输出在同一行,符合要求的格式
方案2:先收集后输出(适合需要复用质数位的场景)
如果后续需要用到筛选出的质数位,可以先把所有符合要求的数字存入容器,再统一格式化输出:
#include <iostream> #include <vector> using namespace std; int main() { int n, digit; cin >> n; vector<int> prime_digits; // 先收集所有质数位 while (n > 0) { digit = n % 10; if (digit == 2 || digit == 3 || digit == 5 || digit == 7) { prime_digits.push_back(digit); } n = n / 10; } // 统一格式化输出 for (int i = 0; i < prime_digits.size(); ++i) { if (i != 0) { cout << " and "; } cout << prime_digits[i]; } cout << endl; return 0; }
两种方案都能正确输出类似2 and 3 and 7的格式,不会出现末尾多余and的问题。
内容的提问来源于stack exchange,提问作者jhjhjh
相关产品推荐
相关产品推荐

