十进制转换成二进制 (栈)
首先,转化的思路是 辗转取余法。比如说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
本文介绍了一种使用栈实现十进制数转换为二进制数的方法。通过辗转取余法,每次取模并将结果压入栈中,直至商为0。最后通过出栈操作逆序输出二进制数。
5301

被折叠的 条评论
为什么被折叠?



