#include<bits/stdc++.h>
using namespace std;
int a[105],jw[305];
int n,len;
int in(char a)
{
if(a=='A') return 10;
if(a=='B') return 11;
if(a=='C') return 12;
if(a=='D') return 13;
if(a=='E') return 14;
if(a=='F') return 15;
return a-'0';
}
int Read(int arr[])
{
string s;
cin>>s;
for(int i=0;i<s.size();i++)
a[i+1]=in(s[i])/10,a[i]=in(s[i])%10;
reverse(a,a+s.size());
return s.size()+1;
}
int add(int arr1[],int arr2[])
{
for(int i=0;i<len;i++)
{
arr1[i]=arr2[i]+arr1[i]+jw[i];
if(arr1[i]>n)
jw[i+1]=a[i]/n,a[i]%=n;
}
return sizeof(arr1)/sizeof(*arr1);
}
void fz(int arr1[],int arr2[])//复制
{
for(int i=0;i<len;i++)
arr2[i]=arr1[i];
}
bool pd(int arr[])
{
int i[len+1];
fz(arr,i);
reverse(i,i+len);
for(int j=0;j<len;j++)
if(arr[j]!=i[j])
return 0;
return 1;
}
int main()
{
memset(a,0,sizeof(a));
memset(jw,0,sizeof(jw));
cin>>n;
len=Read(a);
int ans=0;
bool flag=1;
while(ans<=30&&flag)
{
int ls[len+1];
fz(a,ls);
reverse(ls,ls+len);
len=add(a,ls);
ans++;
if(pd(a))
{
cout<<"STEP="<<ans<<endl;
flag=0;
}
}
if(flag) cout<<"Impossible!"<<endl;
return 0;
}
只有第4个点对了,求大佬指教,谢谢!