如何编写C++程序找出百位数字等于十位与个位之和的三位正整数?
找出所有满足“百位数字等于十位与个位数字之和”的三位正整数
你的代码问题分析
你写的代码存在几个关键问题,导致无法实现需求:
- 变量
s没有在每次循环开始时重置,会持续累加之前的个位和十位数值,导致计算错误 if (x / 10 == 0) break;这个判断完全多余,第一次循环就会触发break,直接终止遍历,根本不会检查后续数字- 缺少核心的判断逻辑:没有对比百位数字和十位+个位的和,输出的也不是符合条件的数
正确实现方法(两种方案)
方案1:遍历所有三位正整数(最直观)
只需要一个循环,遍历100到999的所有数,分离各位后判断条件:
#include <iostream> using namespace std; int main() { // 遍历所有三位正整数 for (int num = 100; num <= 999; ++num) { // 分离百位、十位、个位数字 int hundreds = num / 100; // 三位数除以100取整得到百位 int tens = (num / 10) % 10; // 先去掉个位,再取余10得到十位 int units = num % 10; // 取余10直接得到个位 // 判断百位是否等于十位加个位 if (hundreds == tens + units) { cout << num << " "; } } return 0; }
方案2:枚举各位数字(逻辑更清晰)
用三重循环分别控制百位、十位、个位,直接构造符合条件的数:
#include <iostream> using namespace std; int main() { // 百位数字范围1-9(三位数的百位不能为0) for (int h = 1; h <= 9; ++h) { // 十位数字范围0-9 for (int t = 0; t <= 9; ++t) { // 个位数字范围0-9,同时满足百位=十位+个位 for (int u = 0; u <= 9; ++u) { if (h == t + u) { int num = h * 100 + t * 10 + u; cout << num << " "; } } } } return 0; }
说明
- 方案1代码更简洁,适合快速实现;方案2通过枚举各位数字,能更清晰地理解数字的组成逻辑,适合初学者学习
- 两种方案运行后都会输出所有符合条件的三位数,比如101、110、202、211、220等
内容的提问来源于stack exchange,提问作者phuongThichCode
相关产品推荐
相关产品推荐

