实验三:十进制转换成二进制数(顺序栈)

十进制整数转换为二进制整数  

        十进制整数转换为二进制整具体算法是:用2去除十进制整数,得到一个商和余数,再用2去除商,得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位依次排列起来。

        整个算法比较简单,但输出结果得逆序输出。栈具有先进后出的特点,因此我采用栈来存储余数,实现逆序输出。

源代码:

#include<iostream>
using namespace std;
const int StackSize = 1024;

template <class T>
class SeqStack
{
public:
	SeqStack() { top = -1; }
	void Push(T x);
	T Pop();
	T GetTop();
	int  isEmpty();
private:
	T data[StackSize];	//需要存放的栈元素的数组
	int top;			//栈顶指针
};

template<class T>
void  SeqStack<T>::Push(T x)		//入栈操作
{
	if (top == StackSize - 1)
		throw "上溢";
	top++;
	data[top] = x;
}

template<class T>
T SeqStack<T>::Pop()		//出栈操作
{
	if (top == -1)
		throw "下溢";

	int x = data[top];
	top--;
	return x;
}

template<class T>
T SeqStack<T>::GetTop()
{
	if (top != -1)
		return data[top];
	else
		return NULL;
}

template<class T>
int  SeqStack<T>::isEmpty()
{
	if (top == -1)
		return 0;
	else
		return 1;
}

int main()
{	
	int num;
	SeqStack<int>demo;  //创建存储余数的栈
	cout << "请输入一个十进制的数字:";
	cin >> num;
	while (num != 0)
	{
		demo.Push(num % 2);
		num /= 2;
	}
	cout << "该数的二进制形式为:";
	while (demo.isEmpty())
	{
		cout << demo.Pop();
	}
	cout << endl;
	
	return 0;
}


实验截图:

输入输出:


校验



实验总结与个人心得:

          本次实验涉及的算法相对简单,栈结构的实现代码也很大程度上借鉴课本,实验过程顺利,并没有遇到过多错误。

         


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值