进制转化相关的问题呢,就是取那个数x对要转化成的进制m取余,然后将余数入栈,再x=x/m,再进行循环:
int x=15,m=8,elem;
while(x!=0){
elem=x%m;
*S.top++=elem;
x=x/m;
}
利用栈(以顺序栈作存储结构)实现进制转换。给定一个十进制非负整数,编程将该数以八进制形式输出。
顺序栈的类型定义:
#define MAXSIZE 100 // MAXSIZE为最大数据元素数目
typedef int ElemType;
typedef struct
{ ElemType *base;
ElemType *top;
}SqStack;
输入格式:
输入一个十进制非负整数。
输出格式:
输出转换后的八进制数。
输入样例:
100
输出样例:
在这里给出相应的输出。例如:
144
代码 如下:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int SElemType ;
#define OVERFLOW -2
#define OK 1
#define ERROR -1
using namespace std;
//建立栈
#define MAXSIZE 100 //顺序栈存储空间的分配量
typedef struct{
SElemType *base; //栈底指针
SElemType *top; //栈顶指针
int stacksize; //栈可用的最大容量
}SqStack;
//顺序栈的初始化
Status InitStack( SqStack &S){
//构造一个空表
S.base=new SElemType[MAXSIZE];
//为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
if(!S.base)
exit(OVERFLOW); //存储分配失败
S.top=S.base; //top初始为空栈
S.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZE
return OK;
}
//顺序栈的入栈
Status push(SqStack &S,SElemType x){
int elem,m=8;
//插入元素e为新的栈顶元素
if(S.top-S.base==S.stacksize)
return ERROR;//栈满
while(x!=0){
elem=x%m;
*S.top++=elem;//元素e压入栈顶,栈顶指针加一
x=x/m;
}
return OK;
}
//数据元素出栈
Status pop( SqStack &S,SElemType &e){
if(S.top==S.base) return ERROR;//栈空
while(S.top!=S.base){
e=*--S.top; //栈顶指针减一,再将栈顶元素赋给e
cout<<e;
}
return OK;
}
int main(){
int x,e;
cin>>x;
SqStack S;
InitStack(S);
push(S,x);
pop(S,e);
return 0;
}