
B진법 수 N이 주어지고, 이를 10진법으로 변환하는 문제이다.
Integer.parseInt(String N, int B;
이 메소드는 B진법 문자열 N를 10진법으로 바꿔주는 편리한 기능을 가지고 있다.
그래서 사실 이 메소드만 알고있으면 바로 답을 찾을 수 있다.
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String N = st.nextToken();
int B = Integer.parseInt(st.nextToken());
System.out.println(Integer.parseInt(N, B));
br.close();
}
}
입력받은 B진법 문자열 s를 직접 10진법으로 변환하는 방법이다.
2진법부터 9진법까진 그냥 숫자만 나오니까 그대로 변환하면 되는데,
11진법 부턴 알파벳으로 표현하는 방식이 추가되기 때문에 그 부분만 유의해주면 된다.
최종 출력인 result에다가는
B진법을 입력받았을 경우, 각 자릿수마다 B를 곱해주고, 해당 자릿수의 값을 10진수로 변환 후 더해주면 된다.
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String N = st.nextToken();
int B = Integer.parseInt(st.nextToken());
int result = 0;
for(int i=0; i<N.length(); i++){
char c = N.charAt(i);
int value;
if(c >= 'A' && c <= 'Z'){
value = c - 'A' + 10;
// 'A'는 9다음 나오는 숫자 10을 의미하므로 변환 후 10을 더해준다.
}else{
value = c - '0';
// 일반 숫자면 그저 숫자형태로 변환한다.
}
result = result * B + value;
}
System.out.println(result);
br.close();
}
}
맞았습니다!!