첫번째 난관은 진법 변환하는 방법을 까먹었다는 것 (...)
110(2) 를 적어서 일일이 손으로 계산하고나서야 비로소 생각났다
2진법 -> 10진법 바꿔놓고도 한참은 헷갈렸다는 건 안 비밀
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main_2745 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
String N = input[0];
int B = Integer.parseInt(input[1]);
// ex.ZZZZZ 36
// (35*36^4)+(35*36^3)+(35*36^2)+(35*36)+(35*1)
long sum = 0;
int j=0;
for (int i = N.length()-1; i >= 0; i--,j++) {
char c = N.charAt(j);
int ascii = 0;
if(c >= '0' && c <= '9') {
// 0 빼주는 이유는 '0'이 아스키코드 48이라서
// 숫자로 바꾼 아스키에 -48 해주는거랑 똑같
ascii = c-'0';
} else {
ascii = c-55;
}
sum += ascii * (Math.pow(B, i));
}
System.out.println(sum);
}
}
아스키코드를 사용하면 쉽게 구할 수 있다 for문을 감소하는 형태로 돌려서 각 자릿수마다 값을 구해서 sum 에 더해주면 된다~~
package baekjoon
fun main() {
val input: List<String> = readLine()!!.split(" ")
val N:String = input.get(0)
val B:Double = input.get(1).toDouble()
var sum:Long = 0
var j = 0
for (i in N.length - 1 downTo 0) {
var c = N[j]
var ascii = 0
if( c>= '0' && c<= '9') {
ascii = c-'0'
} else {
ascii = c-(55.toChar())
}
sum += ascii * (Math.pow(B, i.toDouble())).toLong()
j++
}
print(sum)
}
새로 알게 된 사실
1. 코틀린은 자바에서 지원하는 묵시적 형변환을 지원하지 않는다!
2. CharAt을 안써도 인덱스로 쉽게 char형에 접근이 가능하다!
그래서 pow 메서드를 쓸때 형변환을 해주어야 했고 (파라미터 타입이 double 형이라) 변수 c는 String에 인덱스로 접근해서 값을 넣어주면 됐다.
사실 한번 틀렸는데 그건 증가 for문에서 감소 for문으로 바꿀 때 charAt 에 접근하는 인덱스를 안바꿔줘서 ,, 헤헤