아래 글에 있는 진법 변환2 의 반대 버전 문제이다.
진법 변환2 는 10진수 n을 b진수로 바꾸는 문제 였다면
진법 변환은 b진수 n을 10진수로 바꾸는 문제이다.
진법 변환2에서
b진수로 변환 시킬때
if(a%b < 10)
(char)(n%b + '0')
나머지가 10보다 작을 땐 아스키코드 의 '0'을 더해줘서 char값을 표현 했고
else
(char)(n%b-10+'A')
나머지가 10이상 일땐 10을 빼주고 아스키코드 'A'을 더해줘서 A~Z의 값을 표현 했다.
그리고 반대로 출력해서 값을 만들었다.
만약 값이 2진수 1011 이라면
이 값은 반대로 출력한 값이기 때문에
다시 10진수로 바꾸기 위해서는 뒤집지 않고 첫번째 자리부터
첫 번째 자리 값*2^0 + 두 번째 자리 값*2^1 + 세 번째 자리 값*2^2 + 네 번째 자리 값*2^3
으로 계산하면 10진수 값이 나오게 되는것이다.
그리고 계산을 하기 위해서는 b진법으로 바꿀 때 처럼 다시 아스키 코드값을 더해줬으므로
이번엔 빼줘야 한다. 또한 굳이 List<Character>을 사용할 필요 없이 String클래스의 charAt(int index)
메소드를 사용하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int ans = 0;
int b = scan.nextInt();
for(int i=0; i<s.length(); i++) {
if('0' <= s.charAt(i) && '9'>=s.charAt(i))
ans = ans*b+(s.charAt(i)-'0');
else
ans = ans*b+(s.charAt(i)-'A'+10);
}
System.out.println(ans);
}
|
'Algorithm' 카테고리의 다른 글
백준 2089 -2진수 Java (0) | 2019.04.16 |
---|---|
백준 1373 2진수 8진수 & 백준 1212 8진수 2진수 Java (0) | 2019.04.15 |
백준 11005 진법 변환 2 Java (0) | 2019.04.15 |
백준 2609 최대공약수와 최소공배수 Java (0) | 2019.04.15 |
백준 2133 타일채우기 Java (0) | 2019.04.15 |