PKU 1152 An Easy Problem!

http://poj.org/problem?id=1152
与えられた数字をN進数(2 <= N <= 62)として解釈したときに、N-1で割り切れるときの最小のNを求めろというような問題。

入力として0が来る場合を忘れていたり、そもそも入力がintの範囲に収まっているのかが謎な問題。
さすがに-は入っていないよう。

int ctoi[128];

bool decin(const string&in,int base){
  int ret=0;
  rep(i,SZ(in)){
    ret=ret*base+ctoi[in[i]];
    ret%=base-1;
  }
  return ret==0;
}

main(){
  for(int i='0';i<='9';++i)ctoi[i]=i-'0';
  rep(i,26){
    ctoi['A'+i]=i+10;
    ctoi['a'+i]=i+36;
  }

  string in;
  while(cin>>in){
    if(in=="0"){
      cout<<2<<endl;
      continue;
    }
    int base=0;
    rep(i,SZ(in))base=max(base,ctoi[in[i]]+1);
    int ans=-1;
    while(base<=62){
      if(decin(in,base)){
        ans=base;
        break;
      }
      ++base;
    }
    if(ans==-1)cout<<"such number is impossible!"<<endl;
    else cout<<ans<<endl;
  }
}