题解 | #[NOIP1999]回文数#
[NOIP1999]回文数
https://www.nowcoder.com/practice/a432eb24b3534c27bdd1377869886ebb
#include <cstring>
#include <iostream>
using namespace std;
int main() {
int count=0,min=0;
char a[130]={'\0'},b[130]={'\0'};
int N;
cin>>N;
cin.get();
cin.getline(a,130,'\n');
int len=strlen(a);
int flaghui=0,flagstep=0;//
//处理字符串使对应数据连续
for(int i=0;i<len;i++)
{
if(a[i]>='A'&&a[i]<='F')
a[i]=a[i]-65+48+10;
}
for(int c=0;c<30;c++)
{//判断是否为回文
len=strlen(a);
for(int i=0;i<len/2;i++)
{
if(a[i]!=a[len-1-i])
{
flaghui=0;
break;
}
else {
flaghui=1;
}
}
if(flaghui==1)
{
flagstep=1;
cout<<"STEP="<<c;
break;
}
//若不回文加法
strcpy(b,a);
for(int i=0;i<len;i++)
{
int tmp=a[i]+b[len-1-i]-48-48;
if(tmp>=N)
{
a[i]=tmp-N+48;
if(i+1>=len)
a[i+1]='1';
else
a[i+1]=a[i+1]+1;
}
else {
a[i]=tmp+48;
}
}
}
if(flagstep==0)//30步仍未回文
cout<<"Impossible!";
}
// 64 位输出请用 printf("%lld")

