C语言实现十进制数转二进制数输出
程序员文章站
2022-03-01 13:32:56
...
突然想做一个十进制输入,输出相应的二进制数算法。
算法简介:
1、十进制转二进制通过位运算实现;
2、二进制数通过链表保存;
3、因为低位最先得到,所以链表用头插法实现(也可以直接用栈)。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
/*
---------------------------------
function: 输入十进制转化为二进制输出
author: xuan
date:2021-5-17
vision:1.0
---------------------------------
*/
#include<stdio.h>
#include"malloc.h"
typedef struct node{//链表存放二进制数
int data;
struct node* next;
}*linknode;
//函数声明区域
int Get_bitnums(int x);
void Insert_head(linknode L, int x);
void Trans_bit(linknode L, int x, int size);
void output(linknode L);//使用时应传入首节点而不是头节点
int main()
{
linknode L = (linknode)malloc(sizeof(linknode));
L->next = NULL;
printf("请输入一个十进制数:\n");
int x = 0;
scanf("%d", &x);
Trans_bit(L, x, Get_bitnums(x));
output(L->next);
return 0;
}
int Get_bitnums(int x) //传入一个十进制数x,返回相应的二进制数位数
{
int num = 0;
while (x != 0)
{
x = x / 2;
num++;
}
return num;
}
void Insert_head(linknode L, int x) //头插法在L链表中插入值为x的节点
{
linknode s = (linknode)malloc(sizeof(linknode));
s->data = x;
s->next = L->next;
L->next = s;
}
void Trans_bit(linknode L, int x, int size) //将十进制数x转化为二进制保存在链表x中,size表示位数
{
while (size)
{
Insert_head(L, x & 1);
x = x >> 1;
size--;
}
}
void output(linknode L) //输出二进制数链表,每四位空格
{
while (L != NULL)
{
int i = 0;
while (i < 4)
{
printf("%d", L->data);
L = L->next;
i++;
}
printf(" ");
}
}
下一篇: 牛客刷题之数组中只出现一次的数字