
풀이
- 이 문제를 보고 솔직히 감이 잘 오지 않았다.
- 10진법이라면 하위비트부터 10^0=1의 자리, 10^1=10의 자리, 10^2=100의 자리 이런 식으로 증가해 나간다.
- 값은 0~9까지만 숫자로 표현 가능하고, 10부터는 대문자 'A'로 시작한다.
- 따라서 각 자릿수를 증가시켜나갈 변수 x가 필요하다. x=1로 초기화해 1의자리부터 다음 비트로 넘어갈 때마다 B를 곱해줘서 B^i꼴로 증가시켜나간다.
- 변수 result는 0~9 사이 문자라면 -'0'해서 숫자로 변환한 값에 자릿수 x를 곱해 더해준다.
- 0~9범위 외에는 대문자 알파벳이므로 -'A'를 해주고 +10을 더해서 숫자로 변환해준다.
import java.io.*;
import java.lang.*;
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());//B진법
int result =0;//10진수 결과
int x = 1;//1의자리부터 시작
for(int i =N.length()-1; i >= 0; i--){
char ch = N.charAt(i);//맨 아래부터 한문자씩 검사
if(ch>='0' && ch<='9'){
//-'0' 해줘서 진짜 숫자로 변경후 자릿수 곱해 더함
result += (ch-'0') * x;
}
else{
//10부터 'A' 사용하므로 'A'로부터 떨어진 거리에 10더해준다
//ch 'F'면 6+10= 16이 저장되는 것이다.
result += (ch - 'A' + 10) * x;
}
//10진법이면 10의자리, 100의자리다. 즉, B의 자리만큼 곱해줌
x *= B;
}
System.out.println(result);
br.close();
}
}