利用栈的特性将二进制转化为十进制 10001000 -> 136
如上公式,可将二进制入栈。然后一次出栈,将其值进行处理,求和。即得到十进制值。
下边是自己实现的栈以及将二进制转化为十进制的代码
public class Stack {
//最大容量
private int maxSize;
//栈顶指针
private int top;
//栈底指针
private int base;
//存放元素
private int[] arr;
public Stack(int maxSize) {
this.maxSize = maxSize;
arr = new int[maxSize];
top = base = 0;
}
/**
* 入栈,栈满返回false
* @param value
* @return
*/
public boolean push(int value) {
if (top - base >= maxSize) {
return false;
}
arr[top++] = value;
return true;
}
/**
* 出栈
* @return
*/
public int pop() {
if (top == base) {
return -1;
}
return arr[--top];
}
/**
* 查看栈顶元素
* @return
*/
public int peek() {
if (top == base) {
return -1;
}
return arr[top - 1];
}
/**
* 判断栈满
* @return
*/
public boolean isFull() {
return top == maxSize;
}
/**
* 判断栈空
* @return
*/
public boolean isEmpty() {
return top == base;
}
}
package com.yc.algorithm.stack;
/**
* 利用栈的特性将二进制转化为十进制
* 10001000 -> 136
* @author yc
*/
public class twoTOTen {
public static void main(String[] args) {
Stack stack = new Stack(8);
stack.push(1);
stack.push(0);
stack.push(0);
stack.push(0);
stack.push(1);
stack.push(0);
stack.push(0);
stack.push(0);
int i = 0;
int sum = 0;
while (!stack.isEmpty()) {
int temp = stack.pop();
temp *= (int)Math.pow(2, i++);
sum += temp;
}
System.out.println(sum);
}
}