c++用链表将10进制转化为二进制
发布网友
发布时间:2023-08-19 03:34
我来回答
共2个回答
热心网友
时间:2024-12-05 03:27
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
例如:
#include<iostream>
using namespace std;
void main()
{
int n,i,j=0;
int a[1000];//存储二进制编码
cin>>n;
i=n;
while(i)//对2取余并除2,直到商为0时为止
{
a[j]=i%2;
i/=2;
j++;
}
for(i=j-1;i>=0;i--)//逆序输出
cout<<a[i];
cout<<endl;
}追问那么,链表形式呢
热心网友
时间:2024-12-05 03:28
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
// 声明链表的节点,用来存储每个位的二进制码。
typedef struct BinNode
{
int val;
struct BinNode *next;
} BinNode;
/*
将十制数转换为二进制数,binBuf用来存储输出
*/
void dec2Bin(int dec, char *binBuf)
{
BinNode *head = NULL; // 头节点
BinNode *cur = NULL; // 当前节点
while (dec)
{
cur = head;
head = (BinNode*)malloc(sizeof(BinNode));
head->val = dec % 2;
head->next = cur;
dec /= 2;
}
memset(binBuf, 0, 32);
BinNode *prev = NULL;
int i = 0;
for (cur = head; cur != NULL; cur = cur->next)
{
free(prev);
binBuf[i++] = '0' + cur->val;
prev = cur;
}
free(prev);
}
void testBin2Dec()
{
// int有32位,所以用32个字符存储二进制数,多出一位做结束符。
char buf[33] = { '\0' };
int num;
do
{
printf("请输入要转换的十制进数(输入0结束):");
scanf("%d", &num);
if (!num)
break;
dec2Bin(num, buf);
printf("转换后的结果为:%s\n", buf);
} while (num);
}
int main()
{
testBin2Dec();
system("pause");
return 0;
}