数据结构之栈 篇四——栈应用实现进制转换

在前面博客的基础上,应用栈实现进制转换,

主要思想就是短除法,我们利用栈的先进后出的功能来实现逆向输出即可。

下面代码还需要篇三里面的文件,MyStack.h

1、应用一,简单篇

#include <iostream>
#include <stdlib.h>
#include "MyStack.h"
using namespace std;
 
#define BINARY 2
#define OCTONARY 8
#define HEXADECIMAL 16
 
int main(int argc, char** argv) 
{
	MyStack<int> *pStack = new MyStack<int>(30);
	
	int N = 1348;
	int mod = 0;
	
	while(N != 0)
	{
		mod = N % OCTONARY; 	
		pStack->push(mod);
		N = N / OCTONARY;
	}
	
	pStack->stackTraverse(false);

	delete pStack;
	pStack = NULL;
	
	return 0;
}

2、进阶篇

在上面的代码实现进制转换是其实是有问题的,因为在16进制时如果有ABCD之类的输出时很明显会报错,那么如何解决那些问题呢?看下面代码

#include <iostream>
#include <stdlib.h>
#include "MyStack.h"
//#include "Coordinate.h"
using namespace std;
 
#define BINARY 2
#define OCTONARY 8
#define HEXADECIMAL 16
 
int main(int argc, char** argv) 
{
	char num[] = "0123456789ABCDEF";
	MyStack<int> *pStack = new MyStack<int>(30);
	
	int N = 1348;
	int mod = 0;
	
	while(N != 0)
	{
		mod = N % HEXADECIMAL; 	
		pStack->push(mod);
		N = N / HEXADECIMAL;
	}

	int elem = 0;
	while(!pStack->stackEmpty())
	{
		pStack->pop(elem);
		cout << num[elem];
	}
	
	delete pStack;
	pStack = NULL;
	
	return 0;
}

 

 那么再测试一下,10十六进制转换为A

#include <iostream>
#include <stdlib.h>
#include "MyStack.h"
//#include "Coordinate.h"
using namespace std;
 
#define BINARY 2
#define OCTONARY 8
#define HEXADECIMAL 16
 
int main(int argc, char** argv) 
{
	char num[] = "0123456789ABCDEF";
	MyStack<int> *pStack = new MyStack<int>(30);
	
	int N = 10;
	int mod = 0;
	
	while(N != 0)
	{
		mod = N % HEXADECIMAL; 	
		pStack->push(mod);
		N = N / HEXADECIMAL;
	}
	
	int elem = 0;
	while(!pStack->stackEmpty())
	{
		pStack->pop(elem);
		cout << num[elem];
	}
	
	delete pStack;
	pStack = NULL;
	
	return 0;
}

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值