测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题