You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以Stack为输入,实现栈中整数弹出并转二进制?

问题:从栈中弹出整数并转换为二进制的实现逻辑

我已成功编写程序,可接收单个整数并借助栈存储余数完成十进制转二进制,但不清楚如何以栈作为输入,从中逐个弹出整数并转换为二进制。

已实现的代码

class ArrayStack: # 仅允许从栈顶存入和取出元素
    def __init__(self):
        self._data = []

    def __len__(self):
        return len(self._data)
    
    def is_empty(self):
        return len(self._data) == 0
    
    def push(self, e):
        self._data.append(e)

    def top(self):
        if self.is_empty():
            raise Exception("栈中无元素")
        return self._data[-1]
    
    def pop(self):
        if self.is_empty():
            raise Exception("栈中无元素")
        return self._data.pop() 
    

def decToBin(num):
    stack = ArrayStack()
    while num > 0:
        remainder = num % 2
        stack.push(remainder)
        num = num // 2

    _str = ''
    while not stack.is_empty():
        Bin = stack.pop()
        _str = _str + str(Bin)
    # 补充处理输入为0的情况,避免空字符串转整数报错
    return int(_str) if _str else 0

if __name__ == "__main__":
    print(decToBin(65536))

解决方案:处理以栈为输入的整数转二进制

编写一个新函数,直接接收ArrayStack实例作为参数,逐个弹出栈内整数并调用已有的decToBin函数完成转换。

实现代码

def stackElementsToBin(input_stack):
    binary_results = []
    # 循环弹出栈中元素直到为空
    while not input_stack.is_empty():
        current_num = input_stack.pop()
        # 调用现有函数转换为二进制
        binary_num = decToBin(current_num)
        binary_results.append(binary_num)
    return binary_results

# 测试示例
if __name__ == "__main__":
    # 创建测试栈,压入多个整数
    test_stack = ArrayStack()
    test_stack.push(10)
    test_stack.push(20)
    test_stack.push(65536)
    test_stack.push(0) # 测试0的转换
    
    # 转换栈中所有元素
    results = stackElementsToBin(test_stack)
    for i, bin_val in enumerate(results):
        print(f"第{i+1}个弹出的整数对应的二进制:{bin_val}")

说明

  • 栈的特性是后进先出,因此弹出顺序是原栈的栈顶元素优先被处理,最终结果列表的顺序与弹出顺序一致。
  • 补充了decToBin函数对输入为0的处理,避免原代码中输入0时返回空字符串转整数报错的问题。

内容的提问来源于stack exchange,提问作者Satvik Konda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:27:35