カメヲラボ

主にプログラミングとお勉強全般について書いてます

main再帰は大事だネ

先日何気なーく、最大公約数を求めるコードをmain再帰で書いたのですが、結構応用できることに気付きました。もう無理でしょーと思っていた1844番
http://acm.pku.edu.cn/JudgeOnline/problem?id=1844
にmain再帰の手法を用いて、さらに1バイト短い59Bのコードが誕生しました。

m;main(s){
  scanf("%d",&s)<s|s%2?main(s-++m):printf("%d",m);
}

main再帰を使わないと、s-=++mのように'='を書かなければならないところで1バイトの差が出ました。これは2008番
http://acm.pku.edu.cn/JudgeOnline/problem?id=2008
でも使えたので、他の問題でも利用できるかもしれません。