欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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(" ");
	}
}

 

相关标签: C语言学习