A20800. 二进制回文串
填空题
中等
知识点
题目描述
二进制回文串
题目描述
对于一个正整数n,我们将其转换为不含前导零的二进制表示,如果这个二进制序列从左向右读与从右向左读完全相同,则称该数为二进制回文数。例如,9的二进制表示为(1001)2,是二进制回文数;12的二进制表示为(1100)2、不是二进制回文数。
你的任务是:给定一个正整数n,计算在1到n的范围内二进制回文数的数量。
输入格式
输入一行,包含一个正整数n。
输出格式
输出一行,包含一个数,表示在1到n的范围内二进制回文数的数量。
样例
输入样例
15输出样例
6样例解释
样例1中,1到15范围内1、3、5、7、9、15是二进制回文数。
数据范围
1≤n≤105。
参考答案
#include <iostream>
using namespace std;
int main() {
int n, a[50] = {0}, ans = 0;
cin >> n;
for(int i = 1; i <= n; i++) {
int t = i, pos = 0;
while(t) {
a[pos++] = t % 2;
t /= 2;
}
bool ok = true;
for(int i = 0; i < pos; i++)
if(a[i] != a[pos - i - 1]) {
ok = false;
break;
}
ans += ok;
}
cout << ans;
return 0;
}
上一题
下一题