十进制转化二进制【超超简单】,附带蓝桥杯模拟赛第一题详解

转化二进制主要有以下几种:正整数转二进制,负整数转二进制,小数转二进制

今天学习整数转化二进制:除二取余,然后倒序排列,高位补零。

我们用计算器验证一下

那么又有新问题了:遇到很大的数字我们也要用手算吗?这未免也太浪费时间了,而且容易出错,我们可不可以用代码来实现这一功能呢?

分析十进制转化的方法,只用到了一个循环,数字N%2(取余),N/2=a(求商),N=a(将a赋给N)

那么什么时候停止呢?由图片1,我们发现当商为0时停止,即N==0时

完成以上工作后我们只需要将余数倒着排列即可。

那么怎么倒着排列呢?我们可以创建一个中间变量i,每循环一次i++,i即为循环次数,也就是二进制位数,我们可以创建一个数组,将余数赋值给arr[i],令i--,打印arr[i]。

#include<stdio.h>
int main()
{
	int N = 0;//输入一个正整数N
	int i = 0;
	int arr[32];
	scanf("%d", &N);
	while (N != 0)
	{
		int B = N % 2;
		//printf("%d",B); 
		//将B打印出来是倒的二进制,接下来我们将它倒着打印即可
		int a = N / 2;
		N = a;
		arr[i] = B;
		i++;
	}
	for (; i >= 0; i--)
	{
		printf("%d", arr[i]);
	}
	return 0;
}

结果相同,此代码可行

但是有没有更简便的方法呢?

我们可以利用递归,如果数字 N/2>0,我们将N/2 赋值给N,再次进入判断,直到N/2<0,代码如下:

//十进制转换二进制
#include <stdio.h>
void dectobin(int n)
{
    if (n / 2 > 0)
    {
        dectobin(n / 2);
        n=n/2;
    }
    printf("%d", n % 2);
}
int main()
{
    int n;
    scanf("%d", &n);
    dectobin(n);
    return 0;
}

 

 

练习:我们来看一看十四届蓝桥杯模拟赛第一期的第一个题目

十进制整数 2 在十进制中是 1 位数,在二进制中对应 10 ,是 2 位数。
十进制整数 22 在十进制中是 2 位数,在二进制中对应 10110 ,是 5 位数。
请问十进制整数 2022 在二进制中是几位数?

 相比于打印二进制,我们只需要将它的位数计算出来,简单多了

#include<stdio.h>
int main()
{
	int N = 0;
	//输入一个十进制N
	scanf("%d", &N);
	int count = 0;
	while (N != 0)
	{
		int B = N % 2;
		int a = N / 2;
		N = a;
		count++;
	}
	printf("%d", count);
	return 0;
}

  

确实是11位数,此题解决。

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看着不爽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值