50分

P1015 [NOIP1999 普及组] 回文数

```cpp #include<bits/stdc++.h> using namespace std; int n1[205],n2[205],step,base; char c[105]; void add(){ for(int i=1;i<=200;i++){ n1[i]+=n2[i]; } for(int i=1;i<=199;i++){ n1[i+1]+=n1[i]/base; n1[i]%=base; } } int len(int x[]){ int t; for(int i=200;x[i]==0;i--)t=i; return t-1; } void wrap(){ int len1=len(n1); for(int i=len1;i>=1;i--){ n2[i]=n1[len1-i+1]; } } bool check(int x[]){ for(int i=1;i<=len(x)/2+1;i++){ if(x[i]!=x[len(x)-i+1])return 0; } return 1; } int main(){ cin>>base>>c; for(int i=1;i<=strlen(c);i++){ if(c[strlen(c)-i]<='9')n1[i]=c[strlen(c)-i]-'0'; else if(c[strlen(c)-i]>='A'&&c[strlen(c)-i]<='Z')n1[i]=c[strlen(c)-i]-'A'+10; else n1[i]=c[strlen(c)-i]-'a'+10; } for(;step<=30;step++){ wrap(); add(); if(check(n1)){cout<<"STEP="<<step+1;return 0;} } cout<<"Impossible!"; return 0; } ```
by luoguandy @ 2023-12-17 08:59:39


|