c
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define IBFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#define nullE -1
typedef int ElemType;
typedef struct {
ElemType *base;
ElemType *top;
int size;
} *SqStack;
SqStack InitStack(int size) {
SqStack S;
if (!(S = (SqStack)malloc(sizeof(*S)))) exit(OVERFLOW);
if (!(S->base = (ElemType*)calloc(size, sizeof(ElemType)))) exit(OVERFLOW);
S->top = S->base; S->size = size;
return S;
}
SqStack FreeStack(SqStack S) {
if (S) { free(S->base); free(S); } return NULL;
}
void ClearStack(SqStack s) {
s->top = s->base;
}
ElemType GetTop(SqStack S) {
if (!S || S->top == S->base) return nullE;
return *(S->top-1);
}
Status Push(SqStack S, ElemType e) {
ElemType *newbase;
if (!S) return ERROR;
if (S->top - S->base >= S->size) {
S->base = (ElemType*)realloc(S->base, S->size*2*sizeof(ElemType));
if (!S->base) exit(OVERFLOW);
S->top = S->base + S->size;
S->size *= 2;
}
*S->top++ = e;
return OK;
}
ElemType Pop(SqStack S) {
if (!S || S->top == S->base) return nullE;
return *--S->top;
}
Status StackEmpty(SqStack S) {
if (S->top == S->base) return TRUE;
else return FALSE;
}
int f(char *s) {
char start[8], *end;
return strtol(s, &end, 8);
}
char *conversion(int Num, int radix) {
ElemType e; int i; char c; char *vs;
SqStack S;
S = InitStack(6, 3);
if(!(vs = (char*)malloc(10*sizeof(char)))) return NULL;
while (Num) {
Push(S, Num % radix);
Num /= radix;
}
for (i=0; !StackEmpty(S); i++) {
e = Pop(S);
vs[i] = e < 10 ? '0'+e : 'a'+(e-10);
}
vs[i] = '\0';
return vs;
}
int conversion1(int Num, char *s) {
ElemType e; int i; SqStack S;
S = InitStack(6, 3);
while (Num) {
Push(S, Num%8);
Num = Num/8;
}
for(i=0; !StackEmpty(S); i++) {
e = Pop(S); s[i] = '0'+e;
}
s[i] = '\0';
return strtol(s, &s, 8);
}
int conversion2(int Num, char *s) {
ElemType e;
int i, d, cv;
d = 1;
while (Num) {
cv += d*(Num % 8);
d *= 8;
Num = Num/8;
}
return cv;
}