Java Puzzlers って何?!サンプル問題の解答

2013年5月9日 at 1:12 AM

先日、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: 未分類.

Java Puzzlers って何?!サンプル問題 JJUG CCC 2013 Spring の発表資料について


Java Champion & Evangelist

ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

カレンダー

2013年5月
« 3月   6月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  

カテゴリー

Twitter

clustermap

ブログ統計情報

  • 965,333 hits

Feeds


%d人のブロガーが「いいね」をつけました。