我们如何在不将数字转换为256进制的情况下检查一个数字是否是回文的



给定一个数字,必须检查它是否是256进制的回文。具体的问题是必须使用位操作进行检查,并且不应考虑数字的前导0位。

假设数字是64位整数,不考虑前导0位,可以通过找到数字的长度(以256为基数(并从开始和结束比较每组八位位组来解决这个问题。

#include <iostream>
#include <cstdint>
using namespace std;
int get_length(int64_t n) {
int sz = 0;
while(n) {
n >>= 8;
sz++;
}
return sz;
}
bool is_palindrome(int64_t n) {
int64_t mask = 0xff;
int sz = get_length(n);
for (int i = 0, j = sz - i - 1; i < j; i++, j--) {
int left = (n & (mask << (8*i))) >> (8*i);
int right = (n & (mask << (8*j))) >> (8*j);
if (left != right)
return false;
}
return true;
}
int main(void) {
int64_t n;
cin >> n;
cout << is_palindrome(n);
return 0;
}

然而,本质上,这相当于找出数字的256进制表示,但只使用逐位运算符。

相关内容

最新更新