AOJ 2044: Lying about Your Age
ブログに記事を書きます Advent Calendar 2014 - Adventarを切らさないために強引に記事を書いています。
やるだけ。
これだけたくさん解いていてもまだやるだけが残っていた。1000ACの希望が復活してきた感じがする。
#include<stdio.h> #include<algorithm> using namespace std; char str[20]; char s[20]; int main(){ int a,b,c; while(scanf("%d%d%d",&a,&b,&c),~a){ bool ok=false; sprintf(str,"%d",b); for(int i=2;i<17;i++){ long long tmp=0; for(int j=0;str[j];j++){ tmp*=i; tmp+=str[j]-'0'; } bool OK=true; for(int j=0;str[j];j++){ if(str[j]-'0'>=i)OK=false; } if(tmp==a&&OK)ok=true; } if(!ok){ printf("-1\n");continue; } for(int i=a+1;i<=c;i++){ int to=999999999; for(int j=2;j<17;j++){ int tmp=i; int at=0; while(tmp){ s[at++]='0'+tmp%j; tmp/=j; } ok=true; for(int k=0;k<at;k++){ if(s[k]>'9')ok=false; str[at-1-k]=s[k]; } if(ok){ str[at]=0; int val; sscanf(str,"%d",&val); if(b<=val)to=min(to,val); } } b=to; } printf("%d\n",b); } }