站点图标 小文's blog

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

题目:

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


运算过程

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

 

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

退出移动版