十进制转八进制 c语言

原理:
首先在栈底放入哨兵,接着用算法求出余数,把余数依次放入栈中, 然后取栈顶元素,并且出栈栈顶元素。

//十进制转八进制
#include"stdio.h"
#include"stdlib.h"
#define maxsize 100
typedef struct 
{
	int data[maxsize];
	int top;
}link;

void initializa(link *s)//初始化函数
{
	s->top=0;
}

int empty(link *s)//判栈空函数
{
	if(s->top==0)
		return 1;
	else
		return 0;
}

int enter(link *s,int x)//进栈函数
{
	if(empty(s)==maxsize-1)
		{
			printf("此栈已满\n");
			return 0;
		}
	else
		{
			s->top++;
			(s->data)[s->top]=x;
		}
		return 1;
}

int out(link *s,int *x)//出栈函数
{
	if(empty(s)==1)
		{
			printf("此栈为空\n");
			return 0;
		}
	else
		{
			*x=(s->data)[s->top];
			s->top--;
		}
		return 1;
}

int gettop(link *s,int *x)
{
	if(empty(s)==1)
		{
			printf("无顶可取\n");
			return 0;
		}
	else
		{
			*x=(s->data)[s->top];
		}
		return 1;
}

void transform(unsigned x)//转换函数
{
	unsigned y=0;
	link *s;
	s=(link *)malloc(sizeof(link));
	initializa(s);//初始化函数
	enter(s,'#');//进栈函数,注意这个# 是个字符,要加双引号
	while(x!=0)
	{
		enter(s,x%8);
		x=x/8;
	}
	while(1)//存在栈顶元素
	{
		gettop(s,&y);//将栈顶元素(也就是最后一个元素)放到y中
		if(y!='#')
			{
				printf("%d",y);
				out(s,&y);//出栈函数,将最后一个元素剔除
			}
		else
			break;
	}
}

int main()
{
	unsigned x;//无符号x,也就是不能是负数
	printf("请输入要转换的十进制数:\t");
	scanf("%d",&x);
	printf("十进制转八进制的结果为:\t");
	transform(x);
	printf("\n");
	return 0;
}


运行之后:
yunxing

你可能感兴趣的:(c,语言,c语言)