A38978. 九进制回文数提示信息回文数: 反向排列与原来一样的数就叫做回文数例如,12321 是回文数,1231 不是回文数。九进制数: 指逢9进位的一种进位计数制,以0、1、2、3、4、5、6、7、8共九个数码表示。例如: 十进制数 9等于九进制数 10,十进制数 81 等于九进制数 100,以此类推.
填空题
中等
知识点
题目描述
九进制回文数
提示信息
回文数: 反向排列与原来一样的数就叫做回文数
例如,12321 是回文数,1231 不是回文数。
九进制数: 指逢9进位的一种进位计数制,以0、1、2、3、4、5、6、7、8共九个数码表示。例如: 十进制数 9等于九进制数 10,十进制数 81 等于九进制数 100,以此类推.
题目描述
给定两个正整数N和M (1SNsMs5000),请计算出N到M之间 (含N和M) 总共有多少个数满足以下条件:
1、转换为九进制之后为回文数:
2、转换为九进制后每个数位上的数字都是奇数
例如:
当N=90,M=120,90到 120之间(含90和120) 总共有2 个数满定条件,为91 和109;
91 转换为九进制为 111,是一个回文数,且每个数位上的数字都是奇数;
109 转换为九讲制为 131,是一个回文数,且每个数位上的数字都是奇数;
故输出2。
输入描述
输入两个正整数N 和 M (1<N<M<5000),两个正整数之间用一个空格隔开
输出描述
输出一个整数,表示 N到M之间 (含 N和 M) 总共有多少个满足条件的正整数
样例输入
90 120
样例输出
2
参考答案
#include <iostream>
#include <algorithm>
using namespace std;
bool check(int x) {
string s = "";
while (x) {
char c = x % 9 + '0';
if (c % 2 == 0) return false;
s = c + s;
x /= 9;
}
string rev = s;
reverse(s.begin(), s.end());
return s == rev;
}
int main() {
int n, m, ans = 0;
cin >> n >> m;
for (int i = n; i <= m; i++)
if (check(i)) ans++;
cout << ans << endl;
return 0;
}
上一题
下一题