【C++】基于“辗转相除法”求解10进制转2进制数

辗转相除法

十进制转二进制过程如下:
在这里插入图片描述
二进制转十进制的过程如下:
在这里插入图片描述
在这里插入图片描述
为什么十进制转二进制从高往低位次反而升高呢?
事实上
如上图所示,每次相除后取得的余数是2的零次方的常数,因此十进制转二进制的余数依次是Mn…M1,和二进制位相反。

思路

因此,我们可以保存每一次取模的结果,如第一次是29%2=1,将1存到我们的数组中,作为数组的第一个数。
在最后从数组的最后一个依次往前输出就是我们所求的答案。
在这里插入图片描述

代码

#include<iostream>
using namespace std;
int main()
{
	int B[32],res=0,x;  
	//整型数字一般不大于2的31次方-1,若大于则溢出,因此二进制位数最大不大于31,为了防止数组溢出我们可以将数组长度定为32 
	//res用于记录取模次数,res的值也是所求二进制的位数 
	//x是余数 
	long long D;
	cin>>D;
	for(int i=0;D>0;i++) 
	{
		x=D%2;//
		B[i]=x;  res++;  //将余数x存入数组,取模次数加一 
		D/=2;   //除以二进入下一步,当D/=2的值为0时意味着此次是最后一次取模,跳出循环 
	}
	for(int i=res-1;i>=0;i--)cout<<B[i];
	return 0;
} 

输出结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值