import java.io.*;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer conversionTokens = new StringTokenizer(br.readLine());
int future = Integer.parseInt(conversionTokens.nextToken()); // 미래 진법
int current = Integer.parseInt(conversionTokens.nextToken()); // 현재 진법
int T = Integer.parseInt(br.readLine()); // 들어올 숫자의 개수
StringTokenizer numberTokens = new StringTokenizer(br.readLine()); // 숫자들이 적힌 line
int result = 0; // 미래 진법을 10진법으로 바꾼 값을 담은 변수
for (int i = T -1; i >=0; i--) {
int number = (int) (Math.pow(future, i) * Integer.parseInt(numberTokens.nextToken()));
result += number;
}
// 8진법으로 바꿔야지 이제
StringBuilder sb = new StringBuilder(); // sb로 바꾼다.
Stack<Integer> stack = new Stack<>();
while(result > 0) {
// 8로 나눈 나머지를 sb에 더한다.
stack.push(result % current);
// result를 8로 나눈다.
result /= current;
}
while (!stack.isEmpty()) sb.append(stack.pop()).append(" ");
System.out.println(sb);
}
}
두번째 줄에 나오는 숫자의 자리수의 개수가 조건문에 쓰일 key다.
=> 3번째 줄에 몇개의 숫자가 올 것인가이다. (이것도 헤맸다)
굉장히도 멍청했다.
10진법으로 바꾸려면 어떻게 하는가?
=> Math.pow(현재 진법, 자릿수) * 자릿수별 숫자
100을 10진법으로 바꾼다고 한다면?
=> (2^2)1 + (2^1)0 + (2^0)*0이 된다.
Math.pow의 첫번째에 현재 진법을 넣는 것인데 10진법 넣어버림.
그리고 16을 나는 한번 더 내부에서 쪼갰는데 16을 마치 한 자릿수처럼 취급해야 했다. 그 부분에서 또 틀림.
이해가 가지 않았던 점은 10진수에서 8진수로 바꾸면서 왜 자릿수별로 띄어쓰기를 해서 출력하는 것인가였다.
저 미래 진법이라는 것을 당초 이해할 수가 없었다;;
또 출력할 때 무언가 형식이 틀렸나보다. 아마 마지막에 띄어쓰기가 들어가면 안되는데 들어가서가 아닐까 추측해본다.
그래서 stack을 사용하는 것으로 고쳤더니 드디어 맞았다.
대충 실패한 원인