第24887题
计算1到n范围内的二进制回文数个数

【题目描述】 小杨在数学课上学习了二进制数,每个十进制数都可以转换为二进制数,转换方法为短除法:

  1. 把该数不断除以2,记下每次的余数(0或1)
  2. 一直除到商为0为止
  3. 把得到的余数从下往上读,即为对应的二进制数

示例:将9转换为二进制:

9 ÷ 2 = 4 余 1
4 ÷ 2 = 2 余 0
2 ÷ 2 = 1 余 0
1 ÷ 2 = 0 余 1

从下往上读余数得1001,因此9的二进制表示为1001

二进制回文数定义:二进制表示从左向右读和从右向左读完全相同的数。 示例:

  • 9的二进制是1001,正读反读一致,是二进制回文数
  • 12的二进制是1100,反读为0011,去除前导零后为11,与原表示不同,不是二进制回文数

要求编写程序,计算从1到n的所有数字中二进制回文数的个数,将结果存储在变量ans中。

【输入描述】 输入正整数n,满足 1 ≤ n ≤ 10000

【输出描述】 结果存储在变量ans中,表示1到n之间二进制回文数的个数。

【样例说明】 1到15之间的二进制回文数有:1(1)、3(11)、5(101)、7(111)、9(1001)、15(1111),共6个。

【输入样例1】

n=15

【输出样例1】

ans=6

【输入样例2】

n=25

【输出样例2】

ans=8

【注意事项】 变量名拼写(含大小写)需与题目要求完全一致,输入n为给定正整数,结果存入ans变量即可。