問題はこちら
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