T609713 【栈模板】十进制转二进制

题目概述

这道题目要求我们将给定的十进制正整数转换为二进制表示形式。这是一个非常基础但重要的计算机科学问题,涉及到计算机内部数据表示的基本原理。

解题思路

十进制转二进制的基本方法是通过"除2取余法",具体步骤如下:

  1. 将十进制数不断除以2,记录每次的余数(0或1)

  2. 将得到的余数按逆序排列,就是对应的二进制表示

  3. 使用栈数据结构可以很自然地实现这种"后进先出"的需求

参考程序

#include<bits/stdc++.h>
using namespace std;

int q[105], top; // 定义一个数组q作为栈,top表示栈顶指针

int main() {
    int n; 
    cin >> n; // 输入十进制数n
    
    // 将十进制数转换为二进制数的过程
    while(n != 0) {
        q[++top] = n % 2; // 取n除以2的余数压入栈中
        n /= 2;           // n更新为除以2的商
    } 
    
    // 输出二进制结果
    while(top != 0) {
        cout << q[top--]; // 从栈顶开始依次弹出元素,实现逆序输出
    }
    
    return 0;
}

代码解析

  1. 栈的实现:这里使用数组q和栈顶指针top模拟了一个栈结构。q[++top] = n%2实现了压栈操作,q[top--]实现了弹栈操作。

  2. 转换过程

    • 通过循环不断将十进制数n除以2,并将余数压入栈中

    • 当n变为0时,转换过程结束

  3. 输出过程

    • 按照栈的后进先出特性,依次弹出元素并输出

    • 这样自然实现了余数的逆序排列,得到正确的二进制表示

复杂度分析

  • 时间复杂度:O(log₂n),因为每次循环n都至少减半

  • 空间复杂度:O(log₂n),栈中存储的二进制位数与n的二进制位数相同

示例验证

以题目中的样例1为例,n=10:

  1. 10 ÷ 2 = 5 余 0 → 栈:[0]

  2. 5 ÷ 2 = 2 余 1 → 栈:[0,1]

  3. 2 ÷ 2 = 1 余 0 → 栈:[0,1,0]

  4. 1 ÷ 2 = 0 余 1 → 栈:[0,1,0,1]

  5. 弹出顺序:1,0,1,0 → 输出1010

posted @ 2025-05-21 14:40  行胜于言Ibl  阅读(20)  评论(0)    收藏  举报