#include<stdio.h>
#include"stdlib.h"
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct {
int *base;
int *top;
int stacksize;
}Sqstack;
Sqstack s;
void Initstack();
void conversion(int a,int b);
void choice()
{
printf("1:Decimal to binary");printf("/n");
printf("2:Decimal to Octal");printf("/n");
printf("3:Decimal to Hexacimal");printf("/n");
printf("4:exit!");printf("/n");
}
void main()
{
int num,b;
int q;
Initstack();
choice();
scanf("%d",&b);
switch(b){
case 1:q=2;break;
case 2:q=8;break;
case 3:q=16;break;
case 4:exit(1);break;
default:printf("your choice is no effact!");break;
}
//printf("%d,",q);
printf("plses put in a Decimal number");
scanf("%d",&num);
conversion(num,q);
}
void Initstack(){
//printf("hello I'm here !");
s.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s.base){
printf("error");
exit(1);
}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
//printf("daoci");
}
void pushstack(int e){
//printf("I am in the pushstack !");
if(s.top-s.base>=s.stacksize){
s.base=(int*)realloc(s.base,(s.stacksize*STACKINCREMENT)*sizeof(int));
if(!s.base) exit(2);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
//printf("push%d,",e);
}
int popstack(){
int e;
e=*--s.top;
//printf("%d",e);
return e;
}
void conversion (int num ,int n){
int a;
int p;
if(num==0){
printf("%d",num);exit(1);
}
a=num;
while(a){
int m;
m=a%n;
a=a/n;
//printf("%dand%d,",m,a);
pushstack(m);
}
while(!(s.top==s.base)){
p=popstack();
if(p>=10)
printf("%c",p+55);
else
printf("%d",p);
}
}