马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
|