数据结构:栈的应用-数制转换
本帖最后由 划句顾 于 2021-10-13 20:05 编辑作业题来着嘿嘿{:10_254:}
代码如下(第一种方式):
/**
*author :LaoGu
*time :2021/10/12
*purpose:栈的数制转换 --这个看起来比较复杂
**/
#include<iostream>
using namespace std;
一些定义:
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
/定义顺序栈
typedef struct{
int *base; //栈底指针
int *top; //栈顶指针
int stacksize;//栈可用的最大容量
}Sqstack;
//初始化函数
int Init(Sqstack &S){
S.base = new int;
if(!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//判断栈是否为空
bool stackEmpty(Sqstack &S){
if (S.top==S.base)
return true;
else
return false;
}
//入栈
int Push(Sqstack &S,int e){
if(S.top-S.base==S.stacksize)return ERROR;//栈满
*S.top++=e;
return OK;
}
//出栈
int Pop(Sqstack &S,int &e){
if(S.top==S.base) return ERROR;
e=*--S.top;
return OK;
}
//进制转换-十进制转换为八进制
void TenconversionEight(int N){
Sqstack S;
Init(S);
int e;
cout<<"由十进制转换八进制为:";
while(N)
{
Push(S,N%8);
N = N /8;
}
while(!stackEmpty(S))
{
Pop(S,e);
cout<<e;
}
cout<<endl;
}
//进制转换-十进制转换为二进制
void TenconversionTwo(int N){
Sqstack S;
Init(S);
int e;
cout<<"由十进制转换二进制为:";
while(N)
{
Push(S,N%2);
N = N /2;
}
while(!stackEmpty(S))
{
Pop(S,e);
cout<<e;
}
cout<<endl;
}
//进制转换-十进制转换为十六进制
void TenconversionSixteen(int N){
Sqstack S;
Init(S);
int e;
cout<<"由十进制转换十六进制为:";
while(N)
{
if(N%16<=9)
Push(S,N%16);
else
{ switch(N%16){
case 10:Push(S,'A');break;
case 11:Push(S,'B');break;
case 12:Push(S,'C');break;
case 13:Push(S,'D');break;
case 14:Push(S,'E');break;
case 15:Push(S,'F');break;
}
}
N = N /16;
}
while(!stackEmpty(S))
{
Pop(S,e);
if(e>64&&e<71)// ASCII表中A~F是65-70
printf("%c",e);
else
cout<<e;
}
cout<<endl;
}
//主函数
int main(){
int N;
cout<<"请输入数字:";
cin>>N;
TenconversionEight(N);//转换为8进制
TenconversionTwo(N); //转换为2进制
TenconversionSixteen(N); //转换为16进制
return 0;
}
static/image/hrline/5.gif
{:10_327:}
static/image/hrline/5.gif
第二种方式:用一个函数来转换进制数
这个还是和前面的一样:
/**
*author :LaoGu
*time :2021/10/12
*purpose:栈的数制转换
**/
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
//定义顺序栈
typedef struct{
int *base; //栈底指针
int *top; //栈顶指针
int stacksize;//栈可用的最大容量
}Sqstack;
//初始化函数
int Init(Sqstack &S){
S.base = new int;
if(!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//判断栈是否为空
bool stackEmpty(Sqstack &S){
if (S.top==S.base)
return true;
else
return false;
}
//入栈
int Push(Sqstack &S,int e){
if(S.top-S.base==S.stacksize)return ERROR;//栈满
*S.top++=e;
return OK;
}
//出栈
int Pop(Sqstack &S,int &e){
if(S.top==S.base) return ERROR;
e=*--S.top;
return e;
}
不一样的是这个:将转换函数改成可以求二进制、八进制、十六进制了
**** Hidden Message *****
//主函数
int main(){
int a,b;
while(1)
{
cout<<"请输入需要进行数制转换的十进制数:";
cin>>a;
if(a<=0){
cout<<"请重新输入十进制数!!!"<<endl;
break;
}
cout<<"请输入需要转换的进制:";
cin>>b;
conversion(a,b);
cout<<endl;
}
return 0;
}
static/image/hrline/5.gif
运行结果:
https://xxx.ilovefishc.com/album/202110/13/193718uhx7e11xx4kkew99.jpg
static/image/hrline/5.gif
第三种方式:用头文件的方式来搞一搞:
**** Hidden Message *****
static/image/hrline/5.gif
我自己定义的头文件:
**** Hidden Message *****
static/image/hrline/5.gif
{:10_279:}
https://xxx.ilovefishc.com/album/202110/13/194157nxzyk2yh9hvhwexq.jpg
这个照片里面框起来的:在ASCII中A-F是65-70,所以是加55,而0-9是48-57,所以就这样搞
这次审核应该能过了吧QAQ
{:10_266:} {:10_256:} 有话没话都回复一下,让我看看有没有人来看我的帖子{:10_256:} 666
强强强!
{:9_227:} 1
太赞了
有没有大神可以大概解释一下这个函数的基本结构啊啊啊啊啊啊啊啊啊啊啊啊
支持 谢谢分享!! ganxie
感谢分享!
页:
[1]