题解 | #[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")