#include <cstdio>
using namespace std;
int numchange(char a) {
switch (a) {
case '0':return 0; break;
case '1':return 1; break;
case '2':return 2; break;
case '3':return 3; break;
case '4':return 4; break;
case '5':return 5; break;
case '6':return 6; break;
case '7':return 7; break;
case '8':return 8; break;
case '9':return 9; break;
case 'A':case 'a':return 10; break;
case 'B':case 'b':return 11; break;
case 'C':case 'c':return 12; break;
case 'D':case 'd':return 13; break;
case 'E':case 'e':return 14; break;
case 'F':case 'f':return 15; break;
}
}
char cchange(int b) {
switch (b) {
case 0:return '0'; break;
case 1:return '1'; break;
case 2:return '2'; break;
case 3:return '3'; break;
case 4:return '4'; break;
case 5:return '5'; break;
case 6:return '6'; break;
case 7:return '7'; break;
case 8:return '8'; break;
case 9:return '9'; break;
case 10:return 'a'; break;
case 11:return 'b'; break;
case 12:return 'c'; break;
case 13:return 'd'; break;
case 14:return 'e'; break;
case 15:return 'f'; break;
}
}
int main() {
int N, i = 0, s = 0, step = 0, s1 = 0;
bool hj = true;
char sw[660], sw1[660];
scanf("%d\n", &N);
while ((sw[i] = getchar()) != '\n') {
i++;
}
for (int k = 0; k < i; k++) {
sw1[k] = sw[i - k - 1];
}
for (int o = 0; o < i; o++) {
if (sw[o] != sw1[o]) {
hj = true;
break;
}
else {
hj = false;
}
}
while (hj) {
step++;
if (step > 30) {
printf("Impossible!");
break;
}
s = 0;
for (int l = i - 1; l >= 0; l--) {
if (l == 0) {
if ((numchange(sw[l]) + numchange(sw1[l]) + s) / N > 0) {
for (int j = i - 1; j > 0; j--) {
sw[j + 1] = sw[j];
}
sw[1] = cchange((numchange(sw[l]) + numchange(sw1[l]) + s) % N);
sw[0] = cchange((numchange(sw[l]) + numchange(sw1[l]) + s) / N);
i++;
}
else {
sw[0] = cchange(numchange(sw[l]) + numchange(sw1[l]) + s);
}
}
else {
if ((numchange(sw[l]) + numchange(sw1[l]) + s) / N > 0) {
s1 = (numchange(sw[l]) + numchange(sw1[l]) + s) / N;
}
else {
s1 = 0;
}
sw[l] = cchange((numchange(sw[l]) + numchange(sw1[l]) + s) % N);
s = s1;
}
}
for (int k = 0; k < i; k++) {
sw1[k] = sw[i - k - 1];
}
for (int o = 0; o < i; o++) {
if (sw[o] != sw1[o]) {
hj = true;
break;
}
else {
hj = false;
}
}
}
if (step <= 30) {
printf("STEP=%d", step);
}
}
我来解释一下numchange把字符换成数字 cchangge同理 接下来while输入 for得到一个反转的字符串 for检测回文 接下来while进入步数统计 ** 其中有 如果下标为0 判断是否进一位如果进一位则将数据全部后移一位 否则直接输入字符 ** 其他的不多解释