逻辑是这样的:每次除以2,它的余数都是比2小的,只能为1或者0. Stack堆栈的装填方式为先进后出,这与10进制转化为2进制的方式是一直的,它也是由下向上依次来阅读的,所以可以转化为2进制。
核心代码:
Stack<Integer> stack = new Stack<>();
int N = 50;
while(N > 0) //执行的循环体
{
stack.push(N % 2);
N /= 2; // N = N / 2;
}
for(int d = 0 : N){
stack.pop();
}
具体实现代码:
package chapter1.a3;
import edu.princeton.cs.algs4.Stack;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class Example1305 {
//private static int N = 50;
public static void
main(String [] args){
Stack<Integer> stack = new Stack<>();
int N = StdIn.readInt();
while (N > 0){
stack.push(N % 2);
N /= 2;
}
/*
写法一
*/
// for (int d : stack){
// StdOut.print(d);
// }
/*
写法二
*/
//int d = 0;
int n = stack.size();
//for(int i = 0; i < stack.size(); i ++){ 如果这里第二个参数为stack.size()
// 的话,他是一直会发生改变的,会随着pop()操作越来越小。
for (int i =
0; i < n; i ++){
StdOut.print(stack.pop());
}
StdOut.println();
}
}