|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 划句顾 于 2021-10-13 20:05 编辑
作业题来着嘿嘿
代码如下(第一种方式):
- /**
- *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[MAXSIZE];
- 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;
- }
复制代码
第二种方式:用一个函数来转换进制数
这个还是和前面的一样:
- /**
- *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[MAXSIZE];
- 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;
- }
复制代码
不一样的是这个:将转换函数改成可以求二进制、八进制、十六进制了
- //主函数
- 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;
- }
复制代码
运行结果:
第三种方式:用头文件的方式来搞一搞:
我自己定义的头文件:
这个照片里面框起来的:在ASCII中A-F是65-70,所以是加55,而0-9是48-57,所以就这样搞
这次审核应该能过了吧QAQ
|
|