진법 변환
B로 나눈 나머지가 일의자리 숫자이다.
즉 B진법에서 각 자리 숫자는 N을 계속해서 B로 나눈 나머지이다.
다음과 같이 StringBuilder을 사용해서 문자열을 조립했다.
- StringBuilder.append() 메서드는 문자열의 뒤로 삽입한다.
- StringBuilder.insert(n, "s")는 메서드의 n 위치에 삽입한다.
- 맨앞으로 요소들을 넣고 싶은 경우에는 insert를 사용하기보다는 append()로 다 채워 넣고, 마지막에 .reverse()옵션을 주는 것이 낫다.
- insert()는 넣을 때마다 한칸 씩 뒤로 미는 계산이 진행되기 때문에, 효율적인 측면에서 좋지 않다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder answer = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
// B로 나눈 나머지가 각 자리 숫자
// 일의자리 수 부터 구하게 됨
// stringBuilder 사용시 append()는 뒤로, insert()는 위치를 지정해서 넣어준다.
while(!(N == 0)) {
int num = N%B;
if(num>=0 && num<=9) { // 숫자인 경우
answer.insert(0, num);
} else { // 문자인 경우
answer.insert(0, (char)(num-10+'A'));
}
N = N / B; // 다음 자리 수 계산을 위해 현재 계산한 자리 버림
}
bw.write(answer.toString());
bw.flush();
bw.close();
br.close();
}
}
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder answer = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
// B로 나눈 나머지가 각 자리 숫자
// 일의자리 수 부터 구하게 됨
// stringBuilder 사용시 append()는 뒤로, insert()는 위치를 지정해서 넣어준다.
while(!(N == 0)) {
int num = N%B;
if(num>=0 && num<=9) { // 숫자인 경우
answer.append(num);
} else { // 문자인 경우
answer.append((char)(num-10+'A'));
}
N = N / B; // 다음 자리 수 계산을 위해 현재 계산한 자리 버림
}
bw.write(answer.reverse().toString());
bw.flush();
bw.close();
br.close();
}
}