酷代码 AI
菜单
服务商

若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数。例如:给定一个 10进制数 56,将 56加 65(即把56从右向左读),得到 121是一个回文数。又如,对于10进制数87, STEP1: 87+78= 165 STEP2: 165+561= 726 STEP3: 726+627=1353 STEP4:1353+3531=4884 在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。 写一个程序,给定一个N(2<N<=10或N=16)进制数 M.求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible” 。 c++ using namespace std;要有 不要注释

```cpp #include <iostream> #include <string> #include <algorithm> using namespace std; string add(string num1, string num2, int n) { string result; int carry = 0; int i = num1.size() - 1, j = num2.size() - 1; while (i >= 0 || j >= 0 || carry) { int digit1 = (i >= 0) ? (isdigit(num1[i]) ? num1[i] - '0' : num1[i] - 'A' + 10) : 0; int digit2 = (j >= 0) ? (isdigit(num2[j]) ? num2[j] - '0' : num2[j] - 'A' + 10) : 0; int sum = digit1 + digit2 + carry; carry = sum / n; int digit = sum % n; if (digit < 10) { result.push_back(digit + '0'); } else { result.push_back(digit - 10 + 'A'); } i--; j--; } reverse(result.begin(), result.end()); return result; } bool isPalindrome(string num) { int left = 0, right = num.size() - 1; while (left < right) { if (num[left] != num[right]) { return false; } left++; right--; } return true; } int main() { int n; string m; cin >> n >> m; int steps = 0; while (steps <= 30) { if (isPalindrome(m)) { cout << steps << endl; return 0; } string reversed = m; reverse(reversed.begin(), reversed.end()); m = add(m, reversed, n); steps++; } cout << "Impossible" << endl; return 0; } ``` [2025-09-26 19:16:14 | AI问答 | 491点数解答]

相关提问
请收藏新域名:pdcd.cn
发财导航,免费问AI
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]