进制转换问题(全部代码在文章下方)

封装一个函数,将十进制分别转换成二进制、八进制以及十六进制

代码思路:使用数据结构-------->栈 

//进制转换
void stack_numchange(seqStack *s,int num,int n){
	if(NULL==s){
		printf("所给栈不合法\n");
		return;
	}
	int temp=0; //定义变量用来接收余值
	switch(n){
		case 2:
			while(num!=0){   //使用除二取余法求出二进制数
				temp=num%2;  //取余 
				num=num/2;   //取整
				stack_push(s,temp);  //将余数压入栈中 
			}
			stack_display(s);     //对栈进行遍历
			while(s->top!=-1){  //弹出栈中所有数
				stack_pop(s);
			}
			break;
		case 8:
			while(num!=0){  //使用除八取余法求出八进制数
				temp=num%8;
				num=num/8;
				stack_push(s,temp);
			}
			stack_display(s);
			while(s->top!=-1){
				stack_pop(s);
			}
			break;
		case 16:
			while(num!=0){  //使用除十六取余法求出十六进制数
				temp=num%16;
				num=num/16;
				stack_push(s,temp);
			}
			stack_display(s);
			while(s->top!=-1){
				stack_pop(s);
			}
			break;
	}
}

运行结果:

 主函数代码:

#include <stdio.h>
#include "stack.h"
int main(int argc, const char *argv[])
{
	seqStack *s=stack_create();
	if(NULL==s){
		printf("创建失败\n");
		return 0;
	}
	printf("二进制如下:\n");
	stack_numchange(s,75,2);
	putchar(10);
	printf("八进制如下:\n");
	stack_numchange(s,75,8);
	putchar(10);
	printf("十六进制如下:\n");
	stack_numchange(s,75,16);
	putchar(10);
	return 0;
}

定义函数的代码:

#include <stdio.h>
#include <stdlib.h>
#include "stack.h"

//创建
seqStack *stack_create(){
	seqStack *s=(seqStack *)malloc(sizeof(seqStack));
	if(NULL==s){
		printf("创建失败\n");
		return NULL;
	}
	//初始化
	s->top=-1;
	printf("创建成功\n");
	return s;
}
//判空
int stack_empty(seqStack *s){
	return s->top==-1;
}
//判满
int stack_full(seqStack *s){
	return s->top==MAX-1;
}
//入栈
void stack_push(seqStack *s,datatype e){
	if(NULL==s || stack_full(s)){
		printf("入栈失败\n");
		return;
	}
	//先加后压
	//++s->top;    //先加
	//s->data[s->top]=e;  //后压
	s->data[++s->top]=e;
	//printf("入栈成功\n");
}
//遍历
void stack_display(seqStack *s){
	if(NULL==s || stack_empty(s)){
		printf("遍历失败\n");
		return;
	}
	printf("栈中从栈顶到栈底的元素分别是:\n");
	for(int i=s->top;i>=0;i--){
		printf("%d\t",s->data[i]);
	}
	putchar(10);
}
//出栈、弹栈
void stack_pop(seqStack *s){
	if(NULL==s || stack_empty(s)){
		printf("出栈失败\n");
		return;
	}
	//先弹后减
	printf("%d出栈成功\n",s->data[s->top]);
	s->top--;
}
//栈的容量
int stack_size(seqStack *s){
	return s->top+1;
}
//返回栈顶元素
datatype stack_top(seqStack *s){
	if(NULL==s || stack_empty(s)){
		printf("获取失败\n");
		return 0;
	}

	return s->data[s->top];
}
//进制转换
void stack_numchange(seqStack *s,int num,int n){
	if(NULL==s){
		printf("所给栈不合法\n");
		return;
	}
	int temp=0; //定义变量用来接收余值
	switch(n){
		case 2:
			while(num!=0){   //使用除二取余法求出二进制数
				temp=num%2;  //取余 
				num=num/2;   //取整
				stack_push(s,temp);  //将余数压入栈中 
			}
			stack_display(s);     //对栈进行遍历
			while(s->top!=-1){  //弹出栈中所有数
				stack_pop(s);
			}
			break;
		case 8:
			while(num!=0){  //使用除八取余法求出八进制数
				temp=num%8;
				num=num/8;
				stack_push(s,temp);
			}
			stack_display(s);
			while(s->top!=-1){
				stack_pop(s);
			}
			break;
		case 16:
			while(num!=0){  //使用除十六取余法求出十六进制数
				temp=num%16;
				num=num/16;
				stack_push(s,temp);
			}
			stack_display(s);
			while(s->top!=-1){
				stack_pop(s);
			}
			break;
	}
}

头文件代码:

#ifndef __STACK_H__
#define __STACK_H__

#define MAX 20
typedef int datatype;
typedef struct
{
    datatype data[MAX];         //存储栈的数组
    int top;                   //记录栈顶元素所在的下标
}seqStack;
//创建
seqStack *stack_create();
//判空
int stack_empty(seqStack *s);
//判满
int stack_full(seqStack *s);
//入栈
void stack_push(seqStack *s,datatype e);
//遍历
void stack_display(seqStack *s);
//出栈
void stack_pop(seqStack *s);
//栈的容量
int stack_size(seqStack *s);
//返回栈顶元素
datatype stack_top(seqStack *s);
//进制转换
void stack_numchange(seqStack *s,int num,int n);
#endif

Makefile:

TARGET:=a.out

OBJS:=stack.o main.o

CC:=gcc

CFLAGS:=-o

CFLAGSs:=-c -o

$(TARGET):$(OBJS)
	$(CC) $(OBJS) $(CFLAGS) $(TARGET)

%.o:%.c
	$(CC) $*.c $(CFLAGSs) $*.o

.PHONY:clean
clean:
	rm *.o a.out

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值