알고리즘 공부/정올 문제풀이

[정올] 1534 : 10진수를 2,8,16진수로 - (JAVA)

송테이토 2022. 9. 2. 10:28

정올 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진수,8진수,10진수,16진수 쉽게 변환하는 방법 알아보기!

안녕하세요~~! 오늘도 여러분들께 유익한 정보를 드리러 온 나도비 입니다 !! 오늘의 주제는 2진수,8진수,1...

blog.naver.com

 

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진수로 변환