10진수를 2진수로 변환하려면 2로 계속 나누고, 나눈 나머지를 스택에 넣고 이것을 꺼내오면 된다. 그림으로 설명하면 다음과 같다.
여기서의 6,3은 각각 몫이고, 옆에 적힌 1,0은 나머지이다. 책에 나오는 그림을 인용하면 다음과 같다.
이 문제에서는 스택에 저장할 데이터를 찾아 저장하는 것이 관건이다. 즉, 나머지를 스택에 저장하고 하나씩 꺼내서 return해 주면 되는 것이다.
자바 코드로 작성한 결과는 다음과 같다.
import java.util.Stack;
public class num09 {
public static void main(String[] args){
//10진수를 2진수로 변환
Stack<Integer> stack = new Stack<>();
int num = 13;
int moc = 0; //몫
int nam = 0 ;//나머지
StringBuffer sb = new StringBuffer();
while (true){
moc = num / 2;
nam = num % 2;
stack.push(nam);
num = moc;
if(moc == 0){
break;
}
}
while(!stack.isEmpty()){
sb.append(stack.pop()).append(" ");
}
System.out.println(sb);
}
}