#278. 二进制回文数

二进制回文数

二进制回文数

题目描述

对于一个正整数 nn,我们将其转换为不含前导零的二进制表示,如果这个二进制序列从左向右读与从右向左读完全相同,则称该数为二进制回文数。例如,99 的二进制表示为 (1001)2(1001)_2,是二进制回文数;1212 的二进制表示为 (1100)2(1100)_2,不是二进制回文数。

你的任务是:给定一个正整数 nn,计算在 11nn 的范围内二进制回文数的数量。

输入格式

输入一行,包含一个正整数 nn

输出格式

输出一行,包含一个数,表示在 11nn 的范围内二进制回文数的数量。

样例输入

15

样例输出

6

样例解释

对于输入 1515,我们需要找出 111515 中所有的二进制回文数:

  • 11 的二进制为 11,是回文;
  • 22 的二进制为 1010,不是回文;
  • 33 的二进制为 1111,是回文;
  • 44 的二进制为 100100,不是回文;
  • 55 的二进制为 101101,是回文;
  • 66 的二进制为 110110,不是回文;
  • 77 的二进制为 111111,是回文;
  • 88 的二进制为 10001000,不是回文;
  • 99 的二进制为 10011001,是回文;
  • 1010 的二进制为 10101010,不是回文;
  • 1111 的二进制为 10111011,不是回文;
  • 1212 的二进制为 11001100,不是回文;
  • 1313 的二进制为 11011101,不是回文;
  • 1414 的二进制为 11101110,不是回文;
  • 1515 的二进制为 11111111,是回文。

因此,共有 66 个二进制回文数,输出 66

数据范围

1n1051 \le n \le 10^5