题面
计算鸭定义二进制的回文为一个数的二进制 (不补前置零) 是一个回文数。
给定两个数 ,求从 到 之间所有的正整数(包括 )中满足其二进制是一个回文的数的个数。
输入格式:
输入两个正整数 。
输出格式:
输出二进制是回文的数的个数。
解析
乍一看十分简单,数据范围很小可以直接暴力。
想要判断一个数的二进制是否为回文,只要把这个数的二进制表示反转,然后判断与原数是否相等即可。
1 2 3 4 5 6 7 8 9
| bool is_binary_palindrome(int x) { int ori = x; int rev = 0; while (x) { rev = (rev << 1) | (x&1); x >>= 1; } return rev == ori; }
|
于是信心满满提交:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h> #include <stdbool.h>
bool is_binary_palindrome(int x) { ... }
int main() { int a, b, ans = 0; scanf("%d %d", &a, &b); for (int i = a; i <= b; i++) { if (is_binary_palindrome(i)) ans++; } printf("%d", ans); }
|
喜提 WA 55分。
主播当时百思不得其解,更换了无数种写法,各种询问 AI,但都是 55 分。
虽然此题十分冷门,但主播经过不懈努力还是找到了一段 AC 代码,其中赫然写着:
题目没有规定 ,而且是自然语言表述的“从 到 之间所有的正整数”。我们当然可以说 到 之间所有的正整数,很合理是不是呢 合理个p
加上之后果然就 AC 了。