划句顾 发表于 2021-10-13 20:05:03

数据结构:栈的应用-数制转换

本帖最后由 划句顾 于 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:}

划句顾 发表于 2021-10-13 22:01:26

{:10_256:}

划句顾 发表于 2021-10-17 22:19:38

有话没话都回复一下,让我看看有没有人来看我的帖子{:10_256:}

Deteriorat 发表于 2021-11-3 20:15:41

666

学习中.... 发表于 2021-12-21 00:29:23

强强强!

是佳佳啊 发表于 2022-5-24 19:45:04

{:9_227:}

tyl555 发表于 2022-7-30 23:33:34

1

暴风雨中的宁静 发表于 2022-10-18 01:31:43

太赞了

小白不想减肥 发表于 2023-1-14 22:12:32

有没有大神可以大概解释一下这个函数的基本结构啊啊啊啊啊啊啊啊啊啊啊啊

todming12138 发表于 2023-3-20 09:42:50

支持

sgzxzh69 发表于 2023-3-28 16:59:41

谢谢分享!!

超级懒 发表于 2023-8-20 09:32:33

ganxie

数万箴言 发表于 2024-5-6 19:13:08

感谢分享!
页: [1]
查看完整版本: 数据结构:栈的应用-数制转换