/*
十进制到其它进制的转换
*/
# include <stdio.h>
# include <malloc.h>
# define N 8 //要转换成的进制
# define INIT_SIZE 5 //栈的初始空间大小
# define INC_SIZE 2 //栈空间增量
//栈结构
typedef struct
{
int * base; //指向栈底,也是栈空间的地址
int * top; //始终指向有效元素的上一个位置
int initsize; //栈的初始空间大小
}Stack;
void convert(int num); //进制转换
void inital_stack(Stack &s); //初始化栈
void push(Stack &s, int m); //元素入栈
void pop(Stack &s, int * val); //元素出栈
int main(void)
{
int num;
printf("请输入一个十进制数 num = ");
scanf("%d", &num);
convert(num);
return 0;
}
//进制换换
void convert(int num)
{
int m; //记录余数
int val; //保存出栈元素
Stack s;
inital_stack(s);
while(0 != num) //当商为0时结束
{
m = num % N; //取模
push(s, m);
num = num / N;
}
printf("转换成%d进制为:", N);
while(s.top != s.base)
{
pop(s, &val);
printf("%d", val);
}
printf("\n");
}
//初始化栈
void inital_stack(Stack &s)
{
s.initsize = INIT_SIZE;
s.base = (int *)malloc(sizeof(int) * INIT_SIZE);
s.top = s.base;
}
//元素m入栈
void push(Stack &s, int m)
{
//判断栈是否满,满则增加栈的容量
if((s.top - s.base) >= s.initsize)
{
s.base = (int *)realloc(s.base, sizeof(int) * s.initsize + INC_SIZE);
s.initsize = s.initsize + INC_SIZE;
}
*(s.top) = m;
s.top ++;
}
//元素出栈
void pop(Stack &s, int * val)
{
s.top --;
*val = *(s.top);
}
C语言:十进制到八进制转换(用栈实现)
最新推荐文章于 2024-07-14 21:19:59 发布