C++将十进制整数转换为n进制数输出(用栈)

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100

typedef int SElemType;//分号不能掉
typedef int Status;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}Sqstack;//定义

Status Init(Sqstack &S){
S.base=(SElemType*)malloc(sizeof(SElemType)*MAXSIZE);
if(!S.base) return OVERFLOW;
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}//初始化

Status Push(Sqstack &S,const SElemType &e){//const
int i;
if(S.top-S.base==S.stacksize){
return ERROR;
}
*S.top=e;//S.top++=e;//错误数据类型不一样 没有带*
S.top++;
return OK;
} //进栈

Status GetTop(Sqstack S,SElemType &e){
if(S.top==S.base) return ERROR;
e=*(S.top-1);
return OK;
} //读取栈顶元素

Status Pop(Sqstack &S,SElemType &e){
if(S.top==S.base){
printf("栈空,无法出栈\n");
return ERROR;
}
--S.top;//e=*--S.top; 错误点多加了* 会一直循环乱码
e=*S.top;
return OK;
}//出栈

bool StackEmpty(Sqstack S){
if(S.top==S.base) return 1;
else return 0;
}//判空

Status Clear(Sqstack &S){
if(S.base) S.base=S.top;
return OK;
}//清空

void conversion(int N,int base){//N是要转换的十进制数 base为转换的进制 (2,8,16)
SElemType e;//出栈的数
Sqstack S;
Init(S);//构造栈S
printf("请输入要转换的数据:\n");
scanf("%d",&N);
while(N<0||N>MAXSIZE){
printf("输入范围错误,请重新输入:");
scanf("%d",&N);
}
printf("请输入要转换成几进制:\n");
scanf("%d",&base);
while(base<0||base>MAXSIZE){
printf("输入范围错误,请重新输入:");
scanf("%d",&base);
}
while(N){//N作为循环条件
Push(S,N%base);//求余 压栈
N=N/base;//N减小
}
printf("转换的数据为:\n");
while(!StackEmpty(S)){//不是空就出栈
Pop(S,e);//出栈的数放在e
printf("%x",e);//x是16进制 来一个输出一个e 不然会被覆盖
}
}//十进制转d进制

int main(){
Sqstack S1;
int N,base;
if(Init(S1)==OK) {
printf("初始化成功!\n");
conversion(N,base);
}
else printf("初始化失败!");
return 0;
}

//有点搞不懂const

C++将十进制整数转换为n进制数输出(用栈)

 

上一篇:第4篇 Unity中各种shader - Unity 3D ShaderLab开发实践


下一篇:Unity ShaderLab 语法基础一