编辑代码

package main

import (
	"fmt"
	"math"
)

func reverseBits(n int) int {
	rev := 0
	for n > 0 {
		rev = (rev << 1) | (n & 1)
		n >>= 1
	}
	return rev
}

func countBinaryPalindromes(n int) int {
	if n < 0 {
		return 0
	}
	count := 0
	if n >= 0 {
		count = 1 // 包含数字0
	}

	for k := 1; ; k++ {
		bits := int(math.Log2(float64(k))) + 1
		oddPal := (k << (bits - 1)) | reverseBits(k>>1)
		if oddPal > n {
			break
		}
		count++

		// 偶长度回文
		evenPal := (k << bits) | reverseBits(k)
		if evenPal > n {
			continue
		}
		count++
	}

	return count
}

func main() {
	var n int
	fmt.Scan(&n)
	result := countBinaryPalindromes(n)
	fmt.Println(result)
}