2402 Palindrome Numbers
いつもの会での指摘を反映した結果、258 Bになった。下のコード
import java.util.*; class Main{ static{ Scanner s=new Scanner(System.in); for(int o,i,k;(o=s.nextInt())!=0;o+=k-1,System.out.println(o+""+(i==2?"":new StringBuffer((i%2!=0?o:o/10)+"").reverse()))){ i=2;k=1; for(;o>9*k;i++,k*=i%2+1==1?10:1) o-=9*k; } System.exit(0); } }
(o=s.nextInt())!=0という書き方は、C言語でできるのは知っていましたが、なんという文法なのか分からなかったので、いままで使用したことがありません。なんという奴なんでしょうか?
breakをSystem.exit(0)にしたらという助言をやってみたところ、なぜかコンパイルできませんでした。"初期化子は正常に完了できなければなりません。"というエラーがでたのですが、なぜ最後では良くて、breakある箇所ではダメなのかが分かりません。(以下のコードのbreakのところをSystem.exit(0)にするとコンパイルできない)
import java.util.*; class Main{ static{ Scanner s=new Scanner(System.in); for(;;){ int o=s.nextInt(),i=2,k=1; if(o==0)break; for(;o>9*k;i++,k*=i%2+1==1?10:1) o-=9*k; o+=k-1; System.out.println(o+""+(i==2?"":new StringBuffer((i%2!=0?o:o/10)+"").reverse())); } System.exit(0); } }
まだまだコードが短くなりそうですが、期限が過ぎたらやらないと決めてるので、もう止めます。