| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 86283 | sh25_chenyj | 回文数 | C++ | 通过 | 0 MS | 252 KB | 1537 | 2026-03-27 20:33:41 |
#include <iostream> #include <string> #include <algorithm> #include <vector> using namespace std; int N; // 进制 string M; // 初始数字 // 将字符转换为对应的数值 int charToInt(char c) { if (c >= '0' && c <= '9') return c - '0'; if (c >= 'A' && c <= 'F') return c - 'A' + 10; if (c >= 'a' && c <= 'f') return c - 'a' + 10; return 0; } // 将数值转换为对应的字符(用于处理16进制) char intToChar(int n) { if (n >= 0 && n <= 9) return n + '0'; return n - 10 + 'A'; } // 判断字符串是否为回文 bool isPalindrome(string s) { string rev = s; reverse(rev.begin(), rev.end()); return s == rev; } // 高精度 N 进制加法:s = s + reverse(s) string add(int n, string s) { string rev = s; reverse(rev.begin(), rev.end()); string res = ""; int carry = 0; // 进位 for (int i = s.size() - 1; i >= 0; i--) { int sum = charToInt(s[i]) + charToInt(rev[i]) + carry; res += intToChar(sum % n); carry = sum / n; } if (carry > 0) res += intToChar(carry); reverse(res.begin(), res.end()); // 算出来的是反的,倒回来 return res; } int main() { if (!(cin >> N >> M)) return 0; int step = 0; while (step <= 30) { if (isPalindrome(M)) { cout << "STEP=" << step << endl; return 0; } M = add(N, M); step++; } cout << "Impossible!" << endl; return 0; }