十进制转换二进制(C语言)

题目: 链栈 利用链栈实现将一个十进制整数转换成二进制数。然后输出 如:十进制数为出格式类似:十进制数7对应的二进制数为111,对应的八进制数为7

  • 掌握要点:
    • 1.十进制转换成二进制的方法
    • 2.堆栈特点巧妙运用(先进后出,实现倒序)
  • 相关文献:
  • 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

运算过程

要点:除二取余,倒序排列解释:将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取将除得的余数,即换算为二进制数的结果例如把52换算成二进制数,计算结果如图:200除以2得到的余数依次为:00010011,倒序排列,所以200对应的二进制数就是11001000。由于计算机内部表示数的字节单位都是定长的,以2的幂次展开,或者8位,或者16位,或者32位....。于是,一个二进制数用计算机表示时,位数不足2的幂次时,高位上要补足若干个0。本文都以8位为例。那么:(200)10=(11001000)2


实现流程

  1. 建立栈
  2. 初始化栈
  3. 将余数一个个存进栈s中
  4. 元素出栈
  5. 摧毁栈

代码:

#include<stdio.h> #include <malloc.h> #define MaxSize 100 typedef int elemtype; typedef struct { elemtype data[MaxSize]; int top; }SqStack; //建立一个栈 int main() { SqStack *s; s = (SqStack *)malloc(sizeof(SqStack)); s->top = -1; //初始化栈 int num = 111; //待处理的数字 111 while(num > 0) { int m=num/2; int n=num%2; //n进栈 { if(s->top == MaxSize-1) { printf("栈满溢出!!! "); return 0; } s->top++; s->data[s->top]=n; } num=m; } //出栈 { while(s->top != -1) { int res = s->data[s->top]; s->top--; printf("%d", res); } printf(" "); } free(s); //摧毁栈 }

文件下载地址:见文章末尾

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ACM算法日常

10000的阶乘-HDU1042

Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!

781
来自专栏逆向技术

逆向课程第四讲逆向中的优化方式,除法原理,以及除法优化上

           逆向课程第四讲逆向中的优化方式,除法原理,以及除法优化上 除法原理,涉及到了数学公式,而且在汇编中的体现形式也有10几种 这里首先讲解前4...

2138
来自专栏数据结构与算法

07:有趣的跳跃

07:有趣的跳跃 总时间限制: 1000ms 内存限制: 65536kB描述 一个长度为n(n>0)的序列中存在“有趣的跳跃”当前仅当相邻元素的差的绝对值经过...

3785
来自专栏闻道于事

JavaScript循环实例

几个经典的循环案例: 1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 var i=0; var h=0.000...

2875
来自专栏数据结构与算法

线性同余同余方程组解法(excrt)

【问题描述】 求关于 x 的同余方程组 x%a 1 =b 1  a1=b1 x%a 2 =b 2  a2=b2 x%a 3 =b 3  a3=b3 x%a...

4879
来自专栏偏前端工程师的驿站

基础野:细说无符号整数

Brief                                 本来只打算理解JS中0.1 + 0.2 == 0.30000000000000004...

1876
来自专栏数据结构与算法

洛谷 P3386 【模板】二分图匹配 Dinic版

题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每...

3189
来自专栏极客慕白的成长之路

C++上机考试试题解析

3082
来自专栏ACM算法日常

一次看懂进制转换(阶乘是关键) - HDU 2031

对于二进制的转换,我们通常有这样的公式,例如对于一个二进制111001,转换为十进制xx:

843
来自专栏Fish

蓝桥杯 幸运数

先说题意。题意有点长,我还是复制粘贴吧。。。 问题描述 幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。 首先从1开始写出自然数1,...

2106

扫码关注云+社区