关了o2之后#4才能ac不然就会re, #2不管开不开都是wa,蒻苟代码写的很长求别骂
#include<iostream>
using namespace std;
int x,m[106]={-1},n[106]={-1},i=1,ans=0;
//n是把m倒过来,i表示位数
char c;
void plusu(int x) {
for(int j=1;j<=i;j++) {
while(m[j]>=x) {
if(j==i) m[++i]=0;
m[j+1]+=m[j]/x;
m[j]%=x;
}
}
}//m进位
void get_re() {
int k=1;
for(int j=i;j>0;j--) {
n[k++]=m[j];
}
}//n为m的倒序
int check() {
for(int j=1;j<=i/2;j++) {
if(m[i-j+1]!=m[j]) return 0;
}
return 1;
}//检查m是否回文
void get_plus() {
for(int j=1;j<=i;j++) m[j]+=n[j];
ans++;
}
int main(){
cin>>x;
cin.clear();
cin.ignore();
if(x==16) {
while(c=cin.get()) {
if((c=='\n')||(c==' ')) break;
switch(c) {
case '0':m[i++]=int(c-'0');break;
case '1':m[i++]=int(c-'0');break;
case '2':m[i++]=int(c-'0');break;
case '3':m[i++]=int(c-'0');break;
case '4':m[i++]=int(c-'0');break;
case '5':m[i++]=int(c-'0');break;
case '6':m[i++]=int(c-'0');break;
case '7':m[i++]=int(c-'0');break;
case '8':m[i++]=int(c-'0');break;
case '9':m[i++]=int(c-'0');break;
case 'A':m[i++]=int(c-'A'+10);break;
case 'B':m[i++]=int(c-'A'+10);break;
case 'C':m[i++]=int(c-'A'+10);break;
case 'D':m[i++]=int(c-'A'+10);break;
case 'E':m[i++]=int(c-'A'+10);break;
case 'F':m[i++]=int(c-'A'+10);break;
}
}
i--;
plusu(x);
while(!check()) {
get_re();
get_plus();
plusu(x);
}
}
else {
cin>>m[i];
plusu(10);
plusu(x);
while(!check()) {
get_re();
get_plus();
plusu(x);
}
}
if(ans>30) cout<<"Impossible!";
else cout<<"STEP="<<ans;
return 0;
}