#include <iostream.h>
#include <stdlib.h>

#define MaxSize 20

typedef struct
{
    char data[MaxSize]; //
    int top;
}SqStack;

void Menu(void);
void ShowBit(SqStack *s,int x, int r);
void InitStack(SqStack *&s);
int StackEmpty(SqStack *s);
void Push(SqStack *&s, char e);
void Pop(SqStack *&s, char &e);
void DestroyStackt(SqStack *&s);


int  main()
{
    SqStack *s;
    InitStack(s);
    int x;
    int num;
    do
    {
        Menu();
        while(cin >> num )
        {
            if(num >= 1 && num <= 4)
                break;
            else
                cout << "您输入不合法请重新输入:";
        }
        switch(num)
        {
        case 1 :
            cout << "请输入你要转换的10进制数:";
            cin >> x;
            ShowBit(s,x,2);
            break;
        case 2 :
            cout << "请输入你要转换的10进制数:";
            cin >> x;
            ShowBit(s,x,8);
            break;
        case 3 :
            cout << "请输入你要转换的10进制数:";
            cin >> x;
            ShowBit(s,x,16);
            break;
        case 4 :
            DestroyStackt(s);
            cout << "谢谢你的使用,再见!\n";
        }

    }while(num >= 1 && num <= 3);
    return 0;
}
//菜单
void Menu(void)
{
    cout << "\n   欢迎使用进制转换器\n\n";
    cout << "(1)转换为2进制 \n" ;
    cout << "(2)转换为8进制 \n" ;
    cout << "(3)转换为16进制 \n" ;
    cout << "(4)退出\n\n" ;
    cout << "请输入您的选项:" ;
}
//进制转换
void ShowBit(SqStack *s,int x, int r)
{
    //由于16进制须用到 A~F
    char a[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

    while(x!=0)
    {
    Push(s,a[x%r]);
    x=x/r;
    }
    cout << "转换为" << r <<"进制后是:";
    while(!StackEmpty(s))
   {
       Pop(s,a[x]);
       cout << a[x];
       }

}
//初始化
void InitStack(SqStack *&s)
{
    s = (SqStack *)malloc(sizeof(SqStack));
    s -> top = -1;
}
//判空
int StackEmpty(SqStack *s)
{
    return (s -> top == -1);
}
//进栈
void Push(SqStack *&s,char e)
{
    s -> top ++ ;
    s -> data[s -> top] = e;
}
//出栈
void Pop(SqStack *&s, char & e)
{
    e = s -> data[s -> top];
    s -> top -- ;
}
//销毁栈
void DestroyStackt(SqStack * &s)
{
    free(s);
}


在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐