数据结构-栈(二)模板-C++实现-2,8,16进制转换

本文目的:
实现可以输出16进制带A,B,C,D,E,F等符号的进制转换;

//栈的定义.h文件,与栈(一)略有不同
#pragma once
#include<iostream>
#include<string>
using namespace std;
template<class T>
class MyStack
{
public:
	MyStack(int size);//构造
	~MyStack();//析构
	bool s_empty();//判空
	bool s_full();//判满
	void s_in(T t);//进栈
	T s_out();//出栈
	void s_traverse(bool n);//遍历
	void s_clear();//清空
	int s_length();//长度

private:
	T* sta;
	int s_num;
	int s_size;
};
template<class T>
MyStack<T>::MyStack(int size)
{
	s_size = size;
	s_num = 0;
	sta = new T[size];
}
template<class T>
MyStack<T>::~MyStack()
{
	delete []sta;
	sta = NULL;
}
template<class T>
bool MyStack<T>::s_empty()//判空
{
	return s_num == 0 ? true : false;
}
template<class T>
bool MyStack<T>::s_full()//判满
{
	return s_num == s_size ? true : false;
}
template<class T>
void MyStack<T>::s_in(T t)//进栈
{
	if (!s_full())
	{
		sta[s_num] = t;
		s_num++;
	}
	else
	{
		cout << "Can not add any more ingredients!" << endl;
	}	
}

template<class T>
T MyStack<T>::s_out()//出栈
{
	if (!s_empty())
	{
		s_num--;
		//cout << sta[s_num] << endl;
		return sta[s_num];
	}
	else
	{
		cout << "There is no ingredient!" << endl;
	}
}

template<class T>
void MyStack<T>::s_traverse(bool n)
{
	for (int i = 0; i < s_num; i++)
	{
		if (n)
		{
			cout << sta[(s_num-i-1)];
		}
		else
		{
			cout << sta[i];
		}
		
	}
}//遍历

template<class T>
void MyStack<T>::s_clear()
{
	s_num = 0;
}//清空

template<class T>
int MyStack<T>::s_length()
{
	return s_num;
}//长度
//main.cpp应用16进制转换
#include"MyStack.h"
/***********************************************
描述:输入任意十进制数字,分别输出该整数的2进制、8进制、和16进制数;
公式:N=(N div d)*d + N mod d (div表示整除,mod表示求余)
短除法
	N		N div 8			N mod 8
   1348	     168				4
   168		  21				0
   21		  2				    5
   2		  0					2
   其中最右侧一列数即为所求,需要利用栈的后进先出原则从下到上输出。
************************************************/
#define binary 2;
#define octonary 8;
#define hexadecimal 16;
int main(int argc,char* argv[])
{
	//16进制转换示例
	//栈使用-进制转换
	MyStack<int> s(30);
	char num[] = "0123456789ABCDEF";//作为16进制输出值符号索引
	int N; 
	cout << "Which number do you want to change? input it:" << endl;
	cin >> N;
	cout << "Its corresponding number is : " << endl;
	while (N)
	{
		int mod = N % hexadecimal;
		s.s_in(mod);
		N = N / hexadecimal;
	}	
	while (!s.s_empty())//输出时按照输出值找num中索引对应的符号
	{
		int n = s.s_out();
		cout << num[n];
	}
	return 0;
}

/*输出
Which number do you want to change? input it:
2019
Its responding octonary number is :
7E3

*/

posted on 2019-12-12 11:18  Nancy_Fighting  阅读(343)  评论(0编辑  收藏  举报

导航