在前面博客的基础上,应用栈实现进制转换,
主要思想就是短除法,我们利用栈的先进后出的功能来实现逆向输出即可。
下面代码还需要篇三里面的文件,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;
}