各位数之和等于n的回文数

前言

	简单问题,写的不好,大佬见谅.
	如有疏漏,恳请指正,小编垂首.

问题描述:

有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字。编写一个函数,判断某数字是否是回文数字。 现在要从 5位或 6位的十进制数字中找出各个数位之和等于 n 的回文数字。
在这里插入图片描述

问题解析:

  1. 回文数字5-6位
  2. 依旧是位数分开遍历,因为是会文数的,所以三个嵌套循环就好
  3. 因为要按大小排列,所以不能一个三循环内判断,所以写了两个
  4. 因为要判断是否存在合适的数字,可以添加标记,不过应该只有全为9还小于n的情形才会返回-1吧

实现代码:

代码如下(示例):

#include<iostream>
using namespace std;

int main() {
	int n;
	cin >> n;
	if (n <= 54) {//6*9=54
		if (n <= 45) {//5*9=45
			for (int i = 1; i < 10; i++) {
				for (int j = 0; j < 10; j++) {
					for (int k = 0; k < 10; k++) {
						if (n == i * 2 + j * 2 + k) {//五位数
							cout << (i * 10000 + j * 1000 + k * 100 + j * 10 + i) << "\t";
						}
					}
				}
			}
		}
		if (!(n & 1)) {//如果是偶数再查找6位的回文
			for (int i = 1; i < 10; i++) {
				for (int j = 0; j < 10; j++) {
					for (int k = 0; k < 10; k++) {
						if (n == i * 2 + j * 2 + k * 2) {//六位数
							cout << (i * 100000 + j * 10000 + k * 1000 + k * 100 + j * 10 + i) << "\t";
						}
					}
				}
			}
		}
		else if (n > 45) {//说明五位也没有
			cout << -1 << endl;
		}
	}
	else cout << -1 << endl;

	return 0;
}

注意事项

如果是奇数,就只能是五位数呢!!!
所以,就不遍历6位的循环啦!😁

测试案例:

在这里插入图片描述

总结

算法不难,主要是细心

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

twfplayer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值