突然想做一个十进制输入,输出相应的二进制数算法。
算法简介:
1、十进制转二进制通过位运算实现;
2、二进制数通过链表保存;
3、因为低位最先得到,所以链表用头插法实现(也可以直接用栈)。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1/*---------------------------------function: 输入十进制转化为二进制输出author: xuandate:-5-17vision: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(" ");}}