利用栈进行数制转换:
十进制转换八进制:先将十进制数除以八得到余数,余数入栈,然后将得到的商继续除以八,直到商为零
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
//数制转换
//定义链表节点结构体
typedef struct{
int data[MAXSIZE];
int top;
}Stack;
//初始化栈
void InitStack(Stack *S){
S->top = -1; //栈为空
}
//判断栈是否为空
int StackEmpty(Stack *S){
return S->top == -1;
}
//入栈
void Push(Stack *S,int value){
if(S->top<MAXSIZE-1){
S->data[++(S->top)] = value;
}else{
printf("Stack overflow!\n");
}
}
//出栈
void Pop(Stack *S,int *value){
if(!StackEmpty(S)){
*value = S->data[(S->top)--];
}else{
printf("Stack underflow!\n");
}
}
void conversation(){
Stack S; //定义栈变量
int N,e;
//对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数
InitStack(&S); //构造空栈
scanf("%d",&N);
if(N == 0){
printf("0\n");
return;
}
//十进制转八进制
while(N){
Push(&S,N % 8); //余数入栈
N = N / 8;
}
//输出八进制数
while(!StackEmpty(&S)){
Pop(&S,&e);
printf("%d",e);
}
printf("\n");
} //conversation
int main() {
conversation();
return 0;
}