用栈的特性将二进制转化为十进制

利用栈的特性将二进制转化为十进制
10001000     ->      136

0 * 2^{0} + 0 * 2^{1} +0 * 2^{2} +{\color{Red} 1 * 2^{3}} +0 * 2^{4} +0 * 2^{5} +0 * 2^{6} +{\color{Red} 1 * 2^{7}} = {\color{Red} 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);
    }
}

 

### 回答1: 好的,这是一个关于进制转换的编程问题。以下是一个使用顺序实现的示例代码: ```python class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def is_empty(self): return len(self.items) == 0 def convert_base(num, base): digits = "0123456789ABCDEF" stack = Stack() while num > 0: rem = num % base stack.push(rem) num = num // base new_num = "" while not stack.is_empty(): new_num += digits[stack.pop()] return new_num # 进制转十进制 num = "101010" base = 2 decimal = 0 for digit in num: decimal = decimal * base + int(digit) print(decimal) # 十进制进制 num = 42 base = 2 binary = convert_base(num, base) print(binary) # 十进制转八进制 num = 42 base = 8 octal = convert_base(num, base) print(octal) # 十进制转十六进制 num = 42 base = 16 hexadecimal = convert_base(num, base) print(hexadecimal) ``` 希望这个示例代码能够帮助你理解如何使用顺序实现进制转换。 ### 回答2: 利用顺序可以用来求各种进制之间的转换。顺序是一种后进先出(LIFO)的数据结构,可以通过入和出操作实现进制转换。 首先,我们来看进制转十进制。将进制数从最低位开始,逐位取出,然后乘以2的相应次幂,并将结果累加得到十进制数。 接下来是进制转八进制。将进制数从最低位开始,将每3位进制数一组,转换成对应的八进制数。 再来是进制转十六进制。将进制数从最低位开始,将每4位进制数一组,转换成对应的十六进制数。 然后是十进制进制。将十进制数不断除以2,将余数依次入,直到商为0。然后依次出得到进制数。 以上转换过程都可以利用顺序来辅助实现中存储转换后的结果,每次计算得到的位数入。最后按照出顺序组合起来,即得到转换后的进制数。 利用顺序进行进制转换可以简化计算过程,提高转换效率。通过入、出操作和进制转换规则的结合,可以轻松实现各种进制之间的转换。 ### 回答3: 利用顺序可以很方便地实现各种进制之间的转换。 首先来看进制转十进制。我们可以从进制数的最低位开始,每次取出一个数位,然后用2的幂次方乘以进制位上的数字,最后将这些乘积相加得到十进制数。我们可以利用顺序进制数从低位到高位依次入,然后出计算得到十进制数。 接下来是进制转八进制和十六进制。与进制转十进制类似,我们可以按照每3位或4位为一组进行划分,将每组进制数转化为对应的八进制或十六进制数。再利用顺序将每组的结果入,最后将中的结果依次出,得到最终的八进制或十六进制数。 最后是十进制进制。我们可以使用除2取余的方法,将十进制数不断除以2,每次取余数并将余数入,直到商为0为止。然后将中的余数依次出,得到最终的进制数。 通过使用顺序,我们可以方便地完成各种进制之间的转换。顺序的先进后出的特性非常适合这一类问题的解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值