十进制转换成二进制 (栈)

本文介绍了一种使用栈实现十进制数转换为二进制数的方法。通过辗转取余法,每次取模并将结果压入栈中,直至商为0。最后通过出栈操作逆序输出二进制数。

十进制转换成二进制 (栈)

首先,转化的思路是 辗转取余法。比如说n = 5,先取模(5%2)获得1,然后取余并将其赋值给本身,得到n = 2;再取模得到0,取余之后n = 1;对1取模(1%2)得到1,取余得到0。将取模得到的数压入栈,这个数组是{1,0,1},然后用pop(),top()输出栈中的值。(因为结果需要翻转)

如图,左边一列则是要进入栈中的对2取模得到的结果,右边一列则是不断取余并赋值给本身的n的值,可以清晰地看出左边一列入栈的数组在输出时应该从下往上输出,即数组的反转,这一特点正符合了栈“后进先出”的特点。
在这里插入图片描述

用C++中的栈写的

#include<iostream>
#include<stack>
using namespace std;
void change(int n)
{
    stack <int> a;
    while(n)     //只要n取余没有到0,则一直进行
    {
        int b=n%2;  //对n取模
        a.push(b);  //将取模获得的值压入栈
        n=n/2;      //对n取余并复制给其本身
    }
    //接下来是出栈操作,即 将入栈的数据倒序输出
    while(a.size())  //判断栈不为空
    {
        int c = a.top();   //获取栈顶元素,即数组的最后一个元素
        a.pop();          //将栈顶值出栈
        // pop()函数的返回值是void 类型,不能直接获取
        cout<<c;
    }
}
int main()
{
    int n;
    while(cin>>n)
    {
        change(n);
        cout<<endl;
    }
    return 0;
}

介绍一下栈的几个函数;

stack <int> s;
s.empty();   //判断栈是否为空,返回值是 true / false
s.push(1);  //将括号里的值压入栈中
cout<<s.top()<<endl;   //栈顶值为 1
s.push(20);
s.push(300);
cout<<s.top()<<endl;  //现在栈顶值为 300
s.pop();   //栈顶出栈
cout<<s.top()<<endl;  //现在栈顶值为20
cout<<s.size()<<endl;   //数组长度    2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值