問題はこちら
No.499 7進数変換 - yukicoder
基数変換するだけ。
……と見せかけてN=0がコーナーケースになりうるので注意
long s,n; main(){ scanf("%d",&n); s=7; while(s<=n)s*=7; while(s/=7)putchar('0'+n/s%7); }
n%7,n/=7;とすることで下の桁から順に求めることができるので、出力を逆からしたいときの再帰
N=0のケースがいい感じになるように、とりあえずわかりやすく書いてみると
main(i,n){
scanf("%d",&n);
if(n){
main(0,n/7);
putchar(48+n%7);
}else if(i){
putchar(48);
}
}
となる。
scanfの返り値を見れば1回目かどうか分かることと、N=0のときも再帰を呼び出して構わないことを合わせると
main(n){~scanf("%d",&n)|n&&main(n/7)+putchar(48+n%7);}
54B