辗转相除法
十进制转二进制过程如下:
二进制转十进制的过程如下:
为什么十进制转二进制从高往低位次反而升高呢?
如上图所示,每次相除后取得的余数是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;
}
输出结果