/*************************************************************************
> File Name: stack_brk.c
> Author: Andy001847
> Mail: yunzhonglai@hotmail.com
> Created Time: 2014年10月22日 星期三 22时52分48秒
************************************************************************/
//栈的brk/sbrk实现,并且利用栈实现任意进制转换
#include <stdio.h>
#include <unistd.h>
void *begin = NULL;
//初始化栈
void init(){
begin = sbrk(0);
}
//清理栈
void deinit(){
brk(begin);
}
//判栈空
int empty(){
return begin == sbrk(0);
}
//入栈
void push(int data){
*(int *)sbrk(sizeof(int)) = data;
}
//出栈
void pop(){
sbrk(-sizeof(int));
}
//获取栈顶元素
int top(){
return *((int *)sbrk(0) - 1);
}
//获取栈中有效数据个数
int size(){
return (sbrk(0) - begin) / sizeof(int);
}
//进制转换函数
void converts(unsigned int number, int base){
init(); //初始化栈
do{
push(number % base); //入栈
}while(number /= base);
while(!empty()){
if(top() < 10){
printf("%d",top());
}
else{
printf("%c",top() - 10 + 'A');
}
pop(); //出栈
}
printf("\n");
deinit(); //清理栈
}
int main(){
int num = 0;
printf("请输入一个整数:");
while(!scanf("%d",&num)){
scanf("%*[^\n]");
scanf("%*c");
printf("输入有误!请重新输入:");
}
scanf("%*[^\n]");
scanf("%*c");
int base = 0;
printf("请输入要转的进制:");
while(!scanf("%d",&base)){
scanf("%*[^\n]");
scanf("%*c");
printf("输入有误!请重新输入:");
}
scanf("%*[^\n]");
scanf("%*c");
printf("%d转换成%d进制为",num,base);
converts(num, base);
return 0;
> File Name: stack_brk.c
> Author: Andy001847
> Mail: yunzhonglai@hotmail.com
> Created Time: 2014年10月22日 星期三 22时52分48秒
************************************************************************/
//栈的brk/sbrk实现,并且利用栈实现任意进制转换
#include <stdio.h>
#include <unistd.h>
void *begin = NULL;
//初始化栈
void init(){
begin = sbrk(0);
}
//清理栈
void deinit(){
brk(begin);
}
//判栈空
int empty(){
return begin == sbrk(0);
}
//入栈
void push(int data){
*(int *)sbrk(sizeof(int)) = data;
}
//出栈
void pop(){
sbrk(-sizeof(int));
}
//获取栈顶元素
int top(){
return *((int *)sbrk(0) - 1);
}
//获取栈中有效数据个数
int size(){
return (sbrk(0) - begin) / sizeof(int);
}
//进制转换函数
void converts(unsigned int number, int base){
init(); //初始化栈
do{
push(number % base); //入栈
}while(number /= base);
while(!empty()){
if(top() < 10){
printf("%d",top());
}
else{
printf("%c",top() - 10 + 'A');
}
pop(); //出栈
}
printf("\n");
deinit(); //清理栈
}
int main(){
int num = 0;
printf("请输入一个整数:");
while(!scanf("%d",&num)){
scanf("%*[^\n]");
scanf("%*c");
printf("输入有误!请重新输入:");
}
scanf("%*[^\n]");
scanf("%*c");
int base = 0;
printf("请输入要转的进制:");
while(!scanf("%d",&base)){
scanf("%*[^\n]");
scanf("%*c");
printf("输入有误!请重新输入:");
}
scanf("%*[^\n]");
scanf("%*c");
printf("%d转换成%d进制为",num,base);
converts(num, base);
return 0;
}
运行结果演示: