C语言:十进制到八进制转换(用栈实现)

来源:互联网 发布:qq游戏hd登录网络异常 编辑:程序博客网 时间:2024/06/05 18:03
/*十进制到其它进制的转换*/# 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);}

0 0