就是用数组实现N进制运算(基础运算必须掌握);主要是注意10进制以上的会有字母表示(大写或者小写):
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
char s[100];
ll a[100],b[100],Sa,Sb,N;
void Change(){//把字符转化为整数//注意字母问题
ll len=strlen(s),j=0;
for(int i=len-1;i>=0;i--){
if(isdigit(s[i])) a[j++]=s[i]-'0';
if(islower(s[i])) a[j++]=s[i]-'a'+10;
if(isupper(s[i])) a[j++]=s[i]-'A'+10;
}
}
void Reverse(){//翻转
ll j=0;
for(int i=Sa-1;i>=0;i--) b[j++]=a[i];
}
void Add(){//相加,边加边进位
for(int i=0;i<Sa;i++){
a[i]+=b[i];
a[i+1]+=a[i]/N;
a[i]=a[i]%N;
}
if(a[Sa]!=0)Sa++;
}
bool Check(){
for(int i=0;i<Sa/2;i++)
if(a[i]!=a[Sa-1-i]) return false;
return true;
}
int main(){
scanf("%lld%s",&N,s);
Sa=strlen(s);
Change();
// for(int i=0;i<Sa;i++)cout<<a[i];
if(Check()) return printf("STEP=%lld\n",0),0;
Reverse();
for(int i=1;i<=30;i++){
Add();
if(Check())return printf("STEP=%lld\n",i),0;
Reverse();
}
puts("Impossible!");
return 0;
}