본문 바로가기
프로그래밍/백준 알고리즘 코드

[백준] 11005번 JAVA 진법 변환 2 - 일반 수학 1

by 졸린이 2024. 7. 31.
반응형

진법 변환 1과 비슷한 문제이다. 1에서는 수와 진법을 입력하면 10진수로 출력했지만 이번에는 10진수와 진법을 입력하면 입력한 진법으로 출력하는 문제이다.

 

저번 출력을 입력하고 저번 입력을 출력하는 것이므로 순서를 반대로 바꿔서 코딩하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();
        int b = sc.nextInt();
 
        String result = "";
        
        while(n > 0) {
            int re = n % b;
            if(re >= 10) {
                result += (char) (re + 55);
            } else {
                result += re;
            }
            n /= b;
        }
        for(int i=result.length()-1; i >=0; i--)
            System.out.print(result.charAt(i));
    }
}
cs

10진수 n과 진법 b를 입력받고 결과는 String으로 출력한다.

12행 : n이 0이 될 때까지 반복 (입력한 10진수를 b로 계속 나눠서 b진법으로 변환한다.)

13행 : n을 b로 나눠서 나머지를 맨 오른쪽 자리 (1의 자리)부터  수를 입력한다.

14, 5행 : 나머지가 10보다 크면 나누는 수 b가 11 이상이라는 뜻이므로 여기서 나머지 10은 A로 바꿔줘야 한다. 

아스키코드에서 A는 65부터이므로 re가 10이니 55를 더해서 char로 변환하여 결과 result 문자열에 더해준다.

19행 : b로 나누고 나머지를 더했으면 다음번에 또 나눌 수 있는 값이 있는지 확인하기 위해 n을 b로 나누고 몫으로 대체한다.

21, 22행 : result에 맨 앞자리부터 수가 입력됐으므로 출력은 맨 뒤부터 출력한다.

반응형

댓글