揭秘:N 进制数 M 变回文数的最少步数,30 步内见分晓!
```cpp #include <iostream> #include <string> #include <algorithm> // 将字符转换为对应的数值 int charToNum(char c) { if (c >= '0' && c <= '9') { return c - '0'; } return c - 'A' + 10; } // 将数值转换为对应的字符 char numToChar(int num) { if (num < 10) { return num + '0'; } return num - 10 + 'A'; } // 实现N进制加法 std::string add(std::string a, std::string b, int n) { std::string result; int carry = 0; int i = a.size() - 1, j = b.size() - 1; while (i >= 0 || j >= 0 || carry) { int sum = carry; if (i >= 0) { sum += charToNum(a[i]); i--; } if (j >= 0) { sum += charToNum(b[j]); j--; } result.push_back(numToChar(sum % n)); carry = sum / n; } std::reverse(result.begin(), result.end()); return result; } // 判断一个字符串是否是回文串 bool isPalindrome(std::string s) { int left = 0, right = s.size() - 1; while (left < right) { if (s[left] != s[right]) { return false; } left++; right--; } return true; } // 反转字符串 std::string reverseStr(std::string s) { std::string reversed = s; std::reverse(reversed.begin(), reversed.end()); return reversed; } int main() { int n; std::string m; std::cin >> n >> m; int steps = 0; while (steps <= 30) { if (isPalindrome(m)) { std::cout << steps << std::endl; return 0; } std::string reversed = reverseStr(m); m = add(m, reversed, n); steps++; } std::cout << "Impossible" << std::endl; return 0; } ``` 代码说明: 1. `charToNum`函数:将字符转换为对应的数值,对于数字字符,直接转换为对应的整数;对于字母字符,转换为对应的十六进制数值。 2. `numToChar`函数:将数值转换为对应的字符,对于小于10的数值,转换为对应的数字字符;对于大于等于10的数值,转换为对应的十六进制字母字符。 3. `add`函数:实现N进制加法,从低位到高位逐位相加,并处理进位。 4. `isPalindrome`函数:判断一个字符串是否是回文串,通过双指针法比较字符串的首尾字符。 5. `reverseStr`函数:反转字符串。 6. `main`函数:读取输入的进制`n`和N进制数`m`,在30步内不断进行加法操作,直到得到回文数或超过30步。如果在30步内得到回文数,输出步数;否则输出`Impossible`。 ######[AI问答 | 811点数解答 | 2026-02-02 17:44:17]
- C++ 求解区间内 3 的倍数个数与总和:从暴力遍历到数学优化(DeepSeek | 1174点数解答 | 2026-03-13 22:15:22)11
- C++实现星际票务总金额计算及开发建议(字节豆包 | 680点数解答 | 2026-03-19 21:26:58)11
- C++ 代码:从儒略日精准计算公历日期及复杂度分析(字节豆包 | 1156点数解答 | 2026-02-08 19:36:11)33
- C++实现:Alan参加语法周赛的最佳时间分配得分程序(字节豆包 | 708点数解答 | 2025-03-29 14:02:19)198
- Python 函数:如何高效检测字符串是否为回文,注意这些逻辑点!(字节豆包 | 151点数解答 | 2024-11-21 13:18:49)144
- Python 实现:超详细回文检测函数,处理空格标点、空串与递归边界!(字节豆包 | 244点数解答 | 2024-11-21 13:21:58)150
- 信奥期末考:BLS 借占卜规划答题时间,C++ 代码助力争高分!(字节豆包 | 673点数解答 | 2024-12-27 15:38:55)358
- Alan 语法周赛:Python 实现最优时间分配解题全揭秘(字节豆包 | 587点数解答 | 2025-03-29 14:00:47)177
- C++ 实现:精准计算小 X 从入睡到闹钟响的睡眠时间(字节豆包 | 488点数解答 | 2025-11-10 18:42:04)88
- C++ 实现:计算小 X 从入睡到闹钟响的睡眠时间(字节豆包 | 446点数解答 | 2025-11-10 18:42:55)123
- C 语言日期计算代码:错误分析、修改与健壮性提升(字节豆包 | 1504点数解答 | 2025-12-12 20:54:15)49
- 邮局包裹邮寄费用计算程序:开发要点与代码实现(字节豆包 | 272点数解答 | 2025-12-17 11:39:32)50