代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include<string.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int ElemType;
typedef int Status;
typedef struct {
ElemType* base;
ElemType* top;
int stacksize;
}SqStack;
Status Pop(SqStack* S);
void InitStack(SqStack* S) { //创建空栈
S->base = (ElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType));
S->top = S->base;
S->stacksize = STACK_INIT_SIZE; //当前内存大小
}
Status Pop(SqStack* S) { //用e返回栈顶元素,并且删除栈顶元素
if (S->top == S->base) return 0;
char e = *--S->top;
return e;
}
void PrintStack(SqStack* S) { //输出栈中所有元素,并清空栈
while (S->top != S->base) {
int c = Pop(S); //S已经是指针,不需要取地址了
if (c < 10)
printf("%d", c);
else
printf("%c", c);
}
}
void Push(SqStack* S, char e) { //栈顶插入元素
if (S->top - S->base >= S->stacksize) {
S->base = (ElemType*)realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(ElemType)); //重新为S->base分配内存
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*S->top++ = e; //相当于*S->top=e; S->top++;
}
int main() {
int i, j, temp, end = 0;
SqStack S;
InitStack(&S);
int number;
scanf("%d", &number);
int x = number, y = number, z = number;
while (x) { //转换成二进制
temp = x % 2;
x = x / 2;
Push(&S, temp);
}
PrintStack(&S);
printf("\n");
while (y) { //转换成八进制
temp = y % 8;
y = y / 8;
Push(&S, temp);
}
PrintStack(&S);
printf("\n");
while (z) { //转换成十六进制
temp = z % 16;
int temp1;
char temp2;
z = z / 16;
if (temp == 10) {
temp2 = 'A';
Push(&S, temp2);
}
else if (temp == 11) {
temp2 = 'B';
Push(&S, temp2);
}
else if (temp == 12) {
temp2 = 'C';
Push(&S, temp2);
}
else if (temp == 13) {
temp2 = 'D';
Push(&S, temp2);
}
else if (temp == 14) {
temp2 = 'E';
Push(&S, temp2);
}
else if (temp == 15) {
temp2 = 'F';
Push(&S, temp2);
}
else {
temp1 = temp;
Push(&S, temp1);
}
}
PrintStack(&S);
return 0;
}
输入:666
输出: