就是用数组实现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; }