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

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

//进制转换
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.outOBJS:=stack.o main.oCC:=gccCFLAGS:=-oCFLAGSs:=-c -o$(TARGET):$(OBJS)$(CC) $(OBJS) $(CFLAGS) $(TARGET)%.o:%.c$(CC) $*.c $(CFLAGSs) $*.o.PHONY:clean
clean:rm *.o a.out

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

  1. 进制转换c语言代码_奇怪的C语言代码,有些函数在变量前加上(void)是什么类型转换?...

    C语言的语法极其简洁,即使是初次接触编程语言的初学者也能很快学完它的语法.不过,C语言也是一门"灵活得过了头"的编程语言,对于很多初学者来说,编写C语言程序就好像拿着一堆最基本的砖 ...

  2. 【大数进制转换】清华大学考研复试上机——进制转换(10—2)

    进制转换        点击打开链接 时间限制:1秒 空间限制:65536K 热度指数:4274 算法知识视频讲解 题目描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出. 输入描述: ...

  3. 洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)

    小鱼的数字游戏: 代码: #include<iostream> #include<cstring> #include<algorithm> using namesp ...

  4. 进制转换(非常详细+算法代码)

    --快开学了,进制转换忘了怎么办? --没事,看这篇博客保你信手拈来 ! --学不会呢? --****我!! 废话不多说,我们进入正题 : 常用的进制范围和其符号修饰: 二进制(B)---->0 ...

  5. php八进制十六进制,php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码...

    十进制转换为二进制.八进制.十六进制 从十进制向其它进制转换,用的是就用该数字不断除以要转换的进制数,读取余数.连接一起就可以了. 复制代码代码如下: /** *十进制转二进制.八进制.十六进制不足位 ...

  6. 二进制数代码进制转换

    题记:写这篇博客要主是加深自己对二进制数代码的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 进制转换 这个问题比拟基本,也比拟简单,直接给出代码 每日一道理 心的本色该是如此.成 ...

  7. java 10zhuan8,Java代码 10进制转2、8、16进制转换 / 2、8、16进制转10进制转换

    public static void main(String[] args) { int i = 10; System.out.println("***********10进制转换2进制.8 ...

  8. html进制转换js代码,JS中的进制转换以及作用

    js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: 运行下面代码 //10进制转为16进制 (10).toString(16) ...

  9. python转换函数使用_python进制转换函数代码的使用

    python进制转换函数代码的使用 发布时间:2020-04-23 10:23:22 来源:亿速云 阅读:188 作者:小新 以上就是python进制转换函数代码的使用的详细内容了,看完之后是否有所收 ...

最新文章

  1. linux获取后台进程的控制台数据
  2. Spark任务调度流程及调度策略分析
  3. Android7.0 PowerManagerService(1) 启动过程
  4. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
  5. Leetcode--56. 合并区间
  6. Jzoj5237 最长公共子序列
  7. Libra客户端使用
  8. 微服务 注册中心的作用_微服务-服务与注册中心
  9. 小米手机android9换字体,教你免费修改小米手机字体
  10. 报价单常见问题及高效拯救你的报价实用手册
  11. tp5 微信新版本商家转到到零钱,v3秘钥,平台证书和平台证书序列号
  12. 【软件设计】BDD由内而外采用策略
  13. #bfs#[luogu 2873] [USACO07DEC]泥水坑Mud Puddles
  14. 移动端触摸(touch)事件
  15. ng-template、ng-content、ng-container
  16. 使用IPC扫描器进行网络扫描
  17. OpenGL学习之路17---- 镜面反射光
  18. 【ADNI】数据预处理(1)SPM,CAT12;数据集
  19. 计算机教育的改革论文,中职学校计算机教育现状及改革论文
  20. 【Matlab学习手记】二维码

热门文章

  1. linux安装foxmail
  2. Kafka 生产者及消费者详解
  3. LEADTOOLS 22-23 .Net/NetCore/JS/JAVA/Win/Linux
  4. 学计算机脑子反应迟钝,为啥内向的人会反应慢 大脑反应迟钝怎么办
  5. 华章计算机拍了拍你,并送来了8月书单(下)
  6. Nacos在derby模式下密码忘记了如何更改密码?nacos使用derby的ij工具修改密码
  7. 贝佐斯在纽约买下三套公寓 最贵一套最近标价5800万美元
  8. 怀念以前做网管的日子
  9. php网站系统说明,phpweb 网站模版系统文件系统结构说明
  10. 上传文件服务器拒绝你的请求,服务器拒绝了你发送请求 - 卡饭网