문제 해석
틀린 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public 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(); //B진법의 값인 N
int B = Integer.parseInt(st.nextToken()); //몇 진법인지
br.close();
//ex) 2진법인 경우 2^0 2^1 2^2 ... 곱하는 것처럼
int tmp = 1; // 몇진법인지 알기 위해서는 각 문자마다 해당 자리 수 B만큼 곱해주어야한다.
int sum = 0; // 마지막에 출력할 숫자를 의미
//10진법으로 구하기 전에 문자열 하나하나가 각 수를 의미하므로 문자열을 문자로 변환해줘야한다.(하나씩 끄집어내기!)
for(int i = 0; i < N.length(); i++){
char C = N.charAt(i);
if('0' <= C && C <= '9'){ //아스키 코드값으로 숫자의 범위를 비교
sum += (C - '0') * tmp;
}else{
sum += (C- 'A' + 10) * tmp; //10부터 A이기 때문에 10을 더해준다
}
tmp*= B; //자리수가 한칸씩 왼쪽으로 간다는 것은 완쪽으로 B곲하기 한 것과 같다
}
System.out.println(sum);
}
}
결과
-> 엄청난 실수였다.
맞은 코드
import java.io.*;
import java.util.StringTokenizer;
public 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());
br.close();
int tmp = 1;
int sum = 0;
for(int i = N.length()-1 ; i >= 0; i--){ // 여기서, 맨오른쪽 부터 계산!
char C = N.charAt(i);
if ('A' <= C && C<= 'Z') {
sum += (C - 'A' + 10) * tmp;
} else {
sum += (C - '0') * tmp;
}
tmp *= B;
}
System.out.println(sum);
}
}
결과
느낀점