Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
325103 | 王栎州 | 【C6-2】小丽找半个回文数? | C++ | 通过 | 100 | 1 MS | 256 KB | 1988 | 2025-06-01 21:09:01 |
#include<bits/stdc++.h> using namespace std; // 判断一个数是否为回文数 bool isPalindrome(int num) { string s = to_string(num); string reversed = s; reverse(reversed.begin(), reversed.end()); return s == reversed; } // 判断一个字符串是否为回文 bool isPalindromeString(const string& s) { int left = 0; int right = s.length() - 1; while (left < right) { if (s[left] != s[right]) return false; left++; right--; } return true; } // 将数字转换为二进制字符串 string toBinary(int num) { if (num == 0) return "0"; string result = ""; while (num > 0) { result += (num % 2) ? '1' : '0'; num /= 2; } reverse(result.begin(), result.end()); return result; } // 将数字转换为十六进制字符串 string toHex(int num) { if (num == 0) return "0"; string result = ""; while (num > 0) { int remainder = num % 16; if (remainder < 10) { result += remainder + '0'; } else { result += remainder - 10 + 'A'; } num /= 16; } reverse(result.begin(), result.end()); return result; } int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } for (int num : nums) { // 跳过本身是回文数的情况 if (isPalindrome(num)) continue; // 检查二进制表示 string binary = toBinary(num); bool isBinaryPalindrome = isPalindromeString(binary); // 检查十六进制表示 string hex = toHex(num); bool isHexPalindrome = isPalindromeString(hex); // 如果二进制或十六进制是回文数,则输出 if (isBinaryPalindrome || isHexPalindrome) { cout << num << endl; } } return 0; }