一、十进制转二进制
假设十进制整数值为A,对应的二进制数为abcde (每一位的值非0即1)。
众所周知,二进制数换算为十进制的公式如下:
A = a * + b *
+ c *
+ d *
+ e *
所以咱们只要把a,b,c,d,e都取出来就能得到二进制的值。
又 A = 2 * (a * + b *
+ c *
+ d *
) + e
所以A除以2即能得到整数位(a * + b *
+ c *
+ d *
) 和余数e
上边得到的整数(a * + b *
+ c *
+ d *
)除以2即能得到整数位(a *
+ b *
+ c *
)和余数d。
以此类推,可得c,b,a
懂得的原理,我们实现代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20 //静态顺序栈存储的最大空间
typedef struct
{
int data[MAXSIZE];//静态顺序栈可用的最大容量
int top;//栈顶S
}SqStack;
void InitStack(SqStack& S)//栈的初始化
{
S.top = -1;//静态顺序栈中,使S.top=-1便是对栈的初始化
}
int Push(SqStack& S, int e)//进栈
{
if (S.top == MAXSIZE - 1)//判断栈是否为满
{
printf("栈满!\n");
return 0;
}
S.data[++S.top] = e;//S.top自加一,使S.top=0,使输入的e值导入栈中
return 0;
}
void Pop(SqStack& S)//使栈顶元素出栈,并输出栈顶元素,且栈长减一
{
if (S.top == -1)//判断栈是否为空
printf("栈空!\n");
else
printf("%d", S.data[S.top--]);//输出栈顶元素
}
void Binary(SqStack S)//十进制转二进制函数
{
int a,
i = 0;
printf("请输入十进制数: ");
scanf("%d", &a);//输入任意的十进制数
while (a)//循环结束条件是a为0
{
Push(S, a % 2);//余数进栈
a = a / 2;//由于是整数形式,不存在除不尽的状况,假设a=1,除2等于0
i++;//记录进栈多少次 ,方便出栈操作
}
printf("二进制为:");
while (i)//循环终止条件是i为0
{
Pop(S);//依次输出栈顶元素
i--;
}
}
int main()
{
SqStack S;
InitStack(S);//创建一个栈,并初始化
Binary(S);//进制转换
return 0;
}
运行结果:
二、其实也可以用c语言来写这个二进制转换。
#include <stdio.h>
int main()
{
int num; int temp; int i = 0;
int arr[20];
printf("请输入一个十进制数:\n");
scanf("%d", &num);
do
{
temp = num % 2;
num = num / 2;
arr[i++] = temp;
} while (num != 0);
for (int j = i - 1; j >= 0; j--)
printf("%d", arr[j]);
}