高精度 + 回文判断 即可

算法流程

1. 将输入的数存在数组int a[]

void str2array(string str, int a[])
{
    int j = 0;
    for (int i = str.length() - 1; i >= 0; i -- )
    {
        if ('0' <= str[i] && str[i] <= '9') a[ ++ j] = str[i] - '0';
        else a[ ++ j] = str[i] - 'A' + 10;
    }
}

2. 判断是否回文

bool check(int a[], int len)
{
    for (int i = 1, j = len; i <= len >> 1; i ++ , j -- )
        if (a[i] != a[j]) return false;
    return true;
}

3. 若回文 输出操作的Step数, 否则先对数进行翻转

void flip(int a[], int ra[], int len)
{
    int j = 0;
    for (int i = len; i >= 1; i -- )
        ra[ ++ j] = a[i];
}

4. 进行高精度加法, 然后回到步骤2

void add(int a[], int b[])
{
    for (int i = 1; i <= len; i ++ )
    {
        a[i] += b[i];
        a[i + 1] += a[i] / n;
        a[i] %= n;
    }
    if (a[len + 1]) len ++ ;
}

代码

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 10;

int n, len;
int a[N], ra[N];
string str;

// 将string放入int数组中
void str2array(string str, int a[])
{
    int j = 0;
    for (int i = str.length() - 1; i >= 0; i -- )
    {
        if ('0' <= str[i] && str[i] <= '9') a[ ++ j] = str[i] - '0';
        else a[ ++ j] = str[i] - 'A' + 10;
    }
}

// 检查是否为回文
bool check(int a[], int len)
{
    for (int i = 1, j = len; i <= len >> 1; i ++ , j -- )
        if (a[i] != a[j]) return false;
    return true;
}

// 将a数组中的值翻转存入ra中
void flip(int a[], int ra[], int len)
{
    int j = 0;
    for (int i = len; i >= 1; i -- )
        ra[ ++ j] = a[i];
}

// a + b
void add(int a[], int b[])
{
    for (int i = 1; i <= len; i ++ )
    {
        a[i] += b[i];
        a[i + 1] += a[i] / n;
        a[i] %= n;
    }
    if (a[len + 1]) len ++ ;
}

int main()
{
    cin >> n >> str;
    
    str2array(str, a);
   
    len = str.length();
    int cnt = 0;
    while (!check(a, len))
    {
        flip(a, ra, len); // 如果不为回文 则将反转的a 放入ra中
        add(a, ra); // a 和 ra进行相加 结果存在a中
        cnt ++ ; //  操作统计数 cnt ++ ;
        if (cnt > 30) break;
    }
    if (cnt > 30) puts("Impossible!");
    else cout << "STEP=" << cnt << endl;
    
    return 0;
}