Java Puzzlers って何?!サンプル問題の解答
先日、Java Puzzlers のサンプル問題を下記エントリでご紹介しました。
この問題の解説を行います。
結論から言うと、正解は(3)です。皆様正解できましたか?
一見すると
1行目:12345678 + 87654321 = 99999999
2行目:01_234_567 + 76_543_210 = 77777777
となりそうなので、答え(2)を選んでしまう方もいらっしゃるかもしれません。
もしくは12_345_678のように、 _ (アンダースコア)が付いたリテラルに対して加算しているのでコンパイルエラーになると考え(5)を選ばれる方もいらっしゃるかもしれません。数値の間に _ (アンダースコア)が入る事は Java SE 7(Project Coinで) からできるようになりました。このアンダースコアは、数字データの可読性の向上のために自由に使っていただく事ができます。つまり(5)でもありません。
次に、回答(1)を選んだ方は、2行目の部分は気づいた方ではないでしょうか。2行目の先頭に 0 がついていますが、Java では 8進数表記になります。8進表記で 1234567 は 10 進表記では 342391 になります。つまり、10 進数で計算しなおすと下記のようになります。
342391+76543210=76885601
ここまで分かった場合、残った答えは (1) か (3) にしぼられるのですが、このプログラム実はもう一つ落とし穴があります。
1行目の、87_654_32l と記載されている所ですが、実は最後の文字は1(イチ) ではなく l (long:小文字のエル) なのです。
つまり、12345678 + 8765432 = 21111110 となり答えは (3) となります。Primitive の long 型を扱う場合には、混乱を招かないように l(小文字のエル)ではなく、L(大文字のエル)を使いましょうね!!
と、このようなやりとりをパズラーの登壇者がおもしろおかしく、そして分かりやすく紹介します。
パズラーが出す質問に、皆様何問回答できますか? (^_^)
是非、チャレンジしてみてください。
Entry filed under: 未分類.