Javaで基数変換(10進数からn進数、n進数から10進数)
yukicoderの[No.499 7進数変換]を解いていて、10進数で与えられる数値を7進数に変換する必要があったので、自分は数値を7で割りながらその余りを求めていく方法で解いた。以下がその僕の回答だ。
#236582 No.499 7進数変換 - yukicoder
しかし調べていくと、はるかに簡単な求め方があったようなのでそれを紹介する。
import java.util.*; public class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { //【10進数→n進数】 //10進数30を16進数に変換 String s_16 = Integer.toString(30,16); //10進数100を7進数に変換 int i_7 = Integer.parseInt(Integer.toString(100,7)); //出力 System.out.println(s_16); //output = 1e System.out.println(i_7); //output = 202 //【n進数→10進数】 //16進数1eを10進数に変換 int i1 = Integer.parseInt("1e",16); //7進数202を10進数に変換 int i2 = Integer.parseInt("202",7); //出力 System.out.println(i1); //output = 30 System.out.println(i2); //output = 100 //【n進数→m進数】 int n = 2; int m = 8; String s = Integer.toString(Integer.parseInt("1110",n),m); //出力 System.out.println(s); //output = 16 //【基数の下限と上限】 System.out.println(Character.MIN_RADIX); //output = 2 System.out.println(Character.MAX_RADIX); //output = 36 } }
・String sn = Integer.toString(i,n);
→「10進数(i)」を「n進数(sn)」に変換する
・int i = Integer.parseInt("sn",n);
→「n進数(sn)」を「10進数(i)」に変換する
・String sm = Integer.toString(Integer.parseInt("sn",n),m);
→「n進数(sn)」を「m進数(sm)」に変換する
・String sm = Long.toString(Long.parseLong("sn",n),m);
→変換後の値がint型の範囲を超える場合はこっち
これを使うさいの注意点について。
①基数が11以上の進数に変換する場合、戻り値にアルファベットが含まれるので、必ずString型で受け取るようにする。
②基数が10以下の進数に変換する場合は、int型でも受け取ることができる。ただし、Integer.toString()は文字列を返すので、Integer.parseInt()を使ってint型に変換してから受け取る。また、基数が大きいものから小さいものに変換すると、もとの値よりも桁数が増えるので、値によってはLong.parseLong()を使ってlong型で受け取ったほうがいいと思われる。例えば、10進数1000000000を4進数に変換すると323212230220000となり、int型では桁あふれを起こしてしまうので、long型で受け取る。
③基数に設定できるのはCharacter.MIN_RADIXからCharacter.MAX_RADIXまで、2~36となっている。
④10進数から2、8、16進数への変換については、それぞれ専用のメソッドが用意されているようなので、そちらを使ったほうが速いかもしれない。
・String bin = Integer.toBinaryString(i); 10進数i → 2進数bin
・String oct = Integer.toOctalString(i); 10進数i→8進数oct
・String hex = Integer.toHexString(i); 10進数i→16進数hex
記事を書くにあたって、こちらの回答と記事を参考にさせていただきました。
#164033 No.499 7進数変換 - yukicoder
Javaで進数変換を行う方法 - Qiita