好恶心的题!好恶心的题!好恶心的题!
没有一点难度我却调了一个小时
所以必须要发篇文章 哼
导致我调了一个小时的错误:
1、字符型数组转换为int要-'0',十六进制要-'A'+10
2、注意变量是否改变!
a[i]+=tmp[i];
a[i+1]+=a[i]/n;//顺序!顺序!!!+=
a[i]=a[i]%n;
i++;
3、+=不要写成+或=
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cstdlib> using namespace std; //19:44-20:54 好辛酸.. char s[101]; int n,a[101],tmp[101]; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } void addd(int *a,int n) { memset(tmp,0,sizeof(tmp)); for(int i=1;i<=a[0];i++) tmp[i]=a[a[0]-i+1]; int i=1; while(i<=a[0]) { a[i]+=tmp[i]; a[i+1]+=a[i]/n;//顺序!顺序!!!+= a[i]=a[i]%n; i++; } if(a[i]>0) a[0]++;//i不加1 } bool judge(int *a) { for(int i=1;i<=a[0];i++) { if(a[i]==a[a[0]-i+1]) continue; else return false; } return true; } int main() { int n,len,cnt=0; n=read(); gets(s); len=strlen(s); a[0]=len; for(int i=1;i<=a[0];i++) if(s[a[0]-i]>='0'&&s[a[0]-i]<='9') a[i]=s[a[0]-i]-'0';//记住-'0' else a[i]=s[a[0]-i]-'A'+10; if(judge(a)) {puts("0");return 0;} do{ addd(a,n); cnt++; if(cnt>30) {puts("Impossible");return 0;} }while(!judge(a)); printf("%d\n",cnt); return 0; }