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

题目:

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

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


运算过程

要点:除二取余,倒序排列
解释:将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取将除得的余数,即换算为二进制数的结果
例如把52换算成二进制数,计算结果如图:
qq%e6%88%aa%e5%9b%be20161017182245
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); //摧毁栈
}

 

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

点赞

发表回复

在发表评论前请确认您的言论中没有违反中国各项法律、法规和违背社会道德的内容。任何无意义的留言内容都会被直接删除。