- ベストアンサー
2進数変換について教えてくださ。
public class Class1 { public static void main (String[] args) throws Exception { System.out.println("任意の数値を入力してください:"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in),1); try{ String line=reader.readLine(); int n = Integer.parseInt(line); for (int m=n ; m>0; m/=2) { int r =m % 2; System.out.print(r); } System.out.println("\n逆から見ると"+n+"の2進数になっています。"); System.in.read(); } catch (IOException e) { System.err.println("Error Message:"+e); System.in.read(); } catch (NumberFormatException e){ System.out.println("数字ではありません"); System.in.read(); } } } 上のプログラムを実行して例えば8という数字を入力するとすると、 任意の数値を入力してください。 8 0001 逆から見ると8の2進数になってます。 というような感じになるのですが、逆から見ないでも2進数になるように (0001)を(1000)のような感じで数値を逆に表示させるにはどのようにすればいいのでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一番簡単なのは System.out.println(Integer.toBinaryString(n)); ですかね。
その他の回答 (2)
- UKY
- ベストアンサー率50% (604/1207)
まぁ、いろいろやり方はあるわけですが、こんなやり方もある、ということで。 System.out.print(r) でそのまま一桁ずつ出力するのではなく、 StringBuffer をあらかじめ用意しておいてそれに一桁ずつ入れてゆきます。 最後に、StringBuffer の reverse() で文字の並びを逆にして、出力します。 こんな感じ↓ String line=reader.readLine(); int n = Integer.parseInt(line); StringBuffer buffer = new StringBuffer(); for (int m=n ; m>0; m/=2) { int r =m % 2; buffer.append(r); } buffer.reverse(); System.out.println(buffer); System.out.println("逆から見なくても"+n+"の2進数になっています。"); // 以下略
- tomin
- ベストアンサー率21% (18/82)
配列を定義して、int rを次々に放り込んでいって、 表示するときには後ろから1個ずつ表示させればできます。 もしくは、ちょっと手抜きがしたければ double sを定義して、 for (int m=n ; m>0; m/=2) { int r =m % 2; s = s*10+r; } System.out.print(s); なんてこともできます。