정올 1534 : 10진수를 2,8,16진수로
문제
10진수를 입력 받아서 2, 8, 16진수로 바꾸어 출력하는 프로그램을 작성하시오.
입력형식
입력의 첫줄에는 10진수 N(1≤N≤100,000)과 바꿀 진수 B(2, 8, 16)가 공백으로 구분하여 입력된다. 16진수에서 10이상의 수는 순서대로 'A', 'B', 'C', 'D', 'E', 'F'로 나타낸다.
출력형식
입력받은 10진수를 B진수로 바꾸어 출력한다.
코드
방법은 두 가지로 풀 수 있다.
1. toBinaryString(int i) , toOctalString(int i) ,toHexaString(int i)
메서드 사용하기
2. 10진수, 8진수 16진수 출력으로 풀기
%d | 10진(decimal)정수 형식으로 출력 |
%o | 8진(octal)정수 형식으로 출력 |
%x, %X | 16진(hexa-decimal)형태로 출력 |
1번 방법. toBinaryString(int i) , toOctalString(int i) ,toHexaString(int i)
import java.util.Scanner;
public class J1534 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 10진수
int B = sc.nextInt(); // 바꿀 진수(2,8,16)
sc.close();
switch (B) {
// 2진수
case 2:
String binaryString = Integer.toBinaryString(N);
System.out.println(binaryString);
break;
// 8진수
case 8:
String octalString = Integer.toOctalString(N);
System.out.println(octalString);
break;
// 16진수
case 16:
String hexString = Integer.toHexString(N).toUpperCase();//대문자로 변환해주기
System.out.println(hexString);
}
}
}
풀이 및 정리
자바에는 2진수, 8진수, 16진수를 손쉽게 계산하는 메서드를 지원한다.
너무 너무 너무 쉽고 편하게 풀 수 있다.
10진수에서 2,8,16진수로 바꿔주는 메서드
toBinaryString(int i)
toOctalString(int i)
toHexaString(int i)
int N = 27;
//2진수
String binaryString = Integer.toBinaryString(N);
//8진수
**String octalString = Integer.toOctalString(N);
//16진수
String hexString = Integer.toHexString(N)
System.out.println(binaryString); // 11011
System.out.println(octalString); // 33
System.out.println(hexString); // 1B**
반대로
2진수, 8진수, 16진수를 10진수로 바꿔보자
parseInt(String s): 문자열 s를 10진수로 읽어서 int로 반환
parseInt(String s, int radix) : 문자열 s를 변환할 진수로 읽어서 int로 반환
int binaryToDecimal = Integer.parseInt("11011", 2);
int octalToDecimal = Integer.parseInt("33", 8);
int hexaToDecimal = Integer.parseInt("1B", 16);
System.out.println("2진수-> 10진수 : " + binaryToDecimal);
System.out.println("8진수 -> 10진수 : " + octalToDecimal);
System.out.println("16진수 -> 10진수 : " + hexaToDecimal);
2진수-> 10진수 : 27
8진수 -> 10진수 : 27
16진수 -> 10진수 : 27
2번 방법. %o, %x
import java.util.Scanner;
public class J1534_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 10진수
int B = sc.nextInt(); // 바꿀 진수(2,8,16)
sc.close();
switch (B) {
// 2진수
case 2:
String binaryString = Integer.toBinaryString(N);
System.out.println(binaryString);
break;
case 8:
System.out.printf("%o", N);
break;
case 16:
System.out.printf("%X", N); //대문자 출력하기 위해
break;
}
}
}
그래도 진수로 바꾸는 방법은 알고 있어야한다.
[진법변환] 2진수,8진수,10진수,16진수 쉽게 변환하는 방법 알아보기!
2진수에서 10진수로 변환하기
1인 곳에 2의 제곱만 다 더해준다.
64+16+8 = 88
즉 10진수는 88이다.
10진수에서 2진수로 변환하기
2로 더 이상 안나눠질 때까지 나눈다.
2진수 -> 8진수
세자리로 나누어준다.(만약 세자리로 안나눠지면 맨 앞자리에서부터 0을 채운다.
11101 = 011 / 101
나눈 세자리를 변환해준다.
011 -> 3
101->5
앞자리에서부터 써부면 0111101 = 35 이다
8진수 -> 2진수
2진수가 세자리씩 끊어서 변환한다면 8진수를 반대로 숫자를 하나씩 끊어서 2진수로 변환하면 된다.
35라면
3 을 2진수로 바꾸고
5를 2진수로 바꾼다.
2진수 -> 16진수
16진수는 4자리씩 끊어준다.
11100이라면
0001 / 1100
0001->1
1100->12
알파벳은 10부터 시작한다.
10 = A
11 = B
12=C
,....
즉 1C가 된다.
10진수 에서 8진수, 16진수 변환
177
7F
8진수, 16진수를 10진수로 변환
'알고리즘 공부 > 정올 문제풀이' 카테고리의 다른 글
[정올] 1309 : 팩토리얼 -(JAVA) (0) | 2022.09.02 |
---|---|
[정올] 608 : 문자열2 - 자가진단7 (JAVA) (0) | 2022.09.01 |
[정올] 2604 : 그릇 -JAVA (3) | 2022.09.01 |
[정올] 1658 : 최대공약수와최소공배수 - JAVA (0) | 2022.09.01 |