「,(カンマ)」 [yukicoder No.784]
与えられた数字にカンマを入れる、というシンプルな問題です。
// import java.util.*; class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { StringBuilder sb = new StringBuilder(sc.next()); int length = sb.length(); for (int i=length-1; i>=1; i--) { if ((length-i)%3==0) sb.insert(i,","); } System.out.println(sb); } }
シンプルな問題といいつつ、実装に少し苦労しました。
StringBuilder の insert でカンマを挿入していきます。insert で指定する位置は、先頭の文字の直前が0、末尾の文字の直後が (文字列の長さ) となっていて、少し複雑です。表にしてみます。
表の通り、charAt(0) と insert(0) が参照する位置は同じではありません。挿入は文字と文字の間におこなわれるので、こういった位置になっているんですね。ちなみに substring も insert と同じ参照位置です。表の文字列で substring(1,4) とすると、bcdが取得されます。
今回書いたプログラムは、先頭と末尾を除いた挿入位置を後ろからみていって、(文字列長 - 挿入位置の番号) が3の倍数であればカンマを挿入する、という処理になっています。
※補足:String.format() を使うことで、驚くほど簡単に記述できるみたいです。
import java.util.*; class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { System.out.println(String.format("%,d", sc.nextInt())); } }
この書き方は覚えておきたいですね。