进制转换

#include<stdio.h>
#include<stdlib.h>
#define STACK_INT_SIZE 10
#define STACK_INCREMENT 2
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct SqStack{
    int *base;
    int *top;
    int stacksize;
}SqStack;

void InitStack(SqStack *sq){
    sq->base = (int *)malloc(STACK_INT_SIZE*sizeof(int));
    if(!sq->base){
        exit(OVERFLOW);
    }
    sq->top=sq->base;
    sq->stacksize = STACK_INT_SIZE;
}
int StackEmpty(SqStack sq){
    if(sq.base == sq.top)
        return TRUE;
    else
        return FALSE;
}
int StackLength(SqStack sq){
    return (sq.top-sq.base);    
}
void Push(SqStack *sq,int e){
    if(sq->top-sq->base == sq->stacksize){
        sq->base = (int*)realloc(sq->base,(sq->stacksize+STACK_INCREMENT)*sizeof(int));
    if(!sq->base)
        exit(OVERFLOW);
    sq->top = sq->base+STACK_INCREMENT;
    sq->stacksize +=STACK_INCREMENT;
    }
    *(sq->top++) = e;
}
int Pop(SqStack *s,int *e){
    if(s->top == s->base )
        return ERROR;
    *e = *--s->top;
    return OK;
}
void conversion_16(){
    SqStack s;
    int n;
    int e;
    InitStack(&s);
    printf("将进制数转化为16进制数
请输入n (n>0):");
    scanf("%d",&n);
    while(n){
        Push(&s,n%16);
        n = n/16;
    }
    while(!StackEmpty(s)){
        Pop(&s,&e);
        if(e>9){
            printf("%c",e+55);
        }
        else
            printf("%d",e);
    }
    printf("
");
}
void conversion_8(){
    SqStack s;
    int n;
    int e;
    InitStack(&s);
    printf("将10进制数转化为8进制数
请输入n (n>0):");
    scanf("%d",&n);
    while(n){
        Push(&s,n%8);
        n = n/8;
    }
    while(!StackEmpty(s)){
        Pop(&s,&e);
        printf("%d",e);
    }
        
    printf("
");
}
void conversion_2(){
    SqStack s;
    int n;
    int e;
    InitStack(&s);
    printf("将10进制数转化为2进制数
请输入n (n>0):");
    scanf("%d",&n);
    while(n){
        Push(&s,n%2);
        n = n/2;
    }
    while(!StackEmpty(s)){
        Pop(&s,&e);
        printf("%d",e);
    }
    printf("
");
}
int main(){
    SqStack sq;
    InitStack(&sq);
    conversion_16();
    conversion_8();
    conversion_2();
    return 0;
}
原文地址:https://www.cnblogs.com/shubin/p/6877069.html