回文数 II
【描述】
判断一个非负整数 n 的二进制表示是否为回文数
0 <= n <= 2^32 - 1
【样例】
样例1
输入: n = 0
输出: True
解释:
0 的二进制表示为:0。
样例2
输入: n = 3
输出: True
解释:
3 的二进制表示为:11。
样例3
输入: n = 4
输出: False
解释:
4 的二进制表示为:100。
样例4
输入: n = 6
输出: False
解释:
6 的二进制表示为:110。
【方法】
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
bool isPalindrome(int n) {
vector<int> digits;
if (n == 0) {
return true;
}
// 求一个菲负数 的 二进制表示(逆序)
while (n != 0) {
int i = n % 2;
digits.push_back(i);
n /= 2;
}
int size = digits.size();
int sizeHalve = size / 2;
for (int i = size - 1; i >= sizeHalve; i--) {
if (digits[i] != digits[size - 1 -i]) {
return false;
}
}
return true;
}
int main() {
int n = 3;
printf("请输入测试数字;");
while (scanf("%d", &n) != EOF) {
printf("\n");
if (isPalindrome(n)) {
printf("isPalindrome——true\n");
}else {
printf("isPalindrome——false\n");
}
printf("==========================\n");
printf("请输入测试数字;");
}
return 0;
}
【结果】
请输入测试数字;0
isPalindrome——true
==========================
请输入测试数字;1
isPalindrome——true
==========================
请输入测试数字;2
isPalindrome——false
==========================
请输入测试数字;3
isPalindrome——true
==========================
请输入测试数字;4
isPalindrome——false
==========================
请输入测试数字;5
isPalindrome——true
==========================
请输入测试数字;6
isPalindrome——false
==========================
请输入测试数字;7
isPalindrome——true
==========================