回文数(高精度算法)
题目如下:
可能是高精度算法的吧...
#include<cstdio> #include<cctype> #include<cstring> #include<cstdlib> #define maxn 100 using namespace std; int n,a[2][maxn]; char s[maxn]; bool huiwen(int x) { int i,j,k; i=1,j=a[x][0]; for(;i<j;i++,j--) if(a[x][i]!=a[x][j])return 0; return 1; } void readdata() { int i,j,k; scanf("%d%s",&n,s); k=strlen(s); for(i=k-1;i>=0;i--) { if(isdigit(s[i]))j=s[i]-'0'; if(islower(s[i]))j=s[i]-'a'+10; if(isupper(s[i]))j=s[i]-'A'+10; a[0][++a[0][0]]=j; } if(huiwen(0)){printf("STEP=0\n");exit(0);} } void add(int x) { int i,j,k,last,y=1-x; a[x][0]=a[y][0]; for(last=0,i=1;i<=a[y][0];i++) { j=a[y][0]+1-i; a[x][i]=a[y][i]+a[y][j]+last; last=a[x][i]/n,a[x][i]%=n; } if(last>0)a[x][++a[x][0]]=last; } int main() { freopen("huiwen.in","r",stdin); freopen("huiwen.out","w",stdout); readdata(); for(int i=1;i<=30;i++) { add(i%2); if(huiwen(i%2)) { printf("%d\n",i); return 0; } } printf("Impossible\n"); fclose(stdin); fclose(stdout); return 0; }蒟蒻也要努力!