题解
2023-10-03 16:45:47
发布于:广东
88阅读
0回复
0点赞
开始教程
本题是一道经典转进制题,由于只转2进制,所以只列出2进制代码。
请勿直接抄袭
10进制转2进制的过程是列短除法
比如12
12/2=6 -余数为0 ↑
6/2=3 ---余数为0 |
3/2=1 ---余数为1 |......余数从下往上取,叫做倒排余。
1/2=0 ---余数为1 |
所以12的二进制是1100
思路
我们用作为2进制数组,一个一个数往下标取存储,然后倒序输出来。
开始上代码
void TurnData(int n){//转2进制函数
int x[17],i,j,k=0;//定义二进制存储数组x,模2的余数i,j是绝对值n后的,k是数组下标
j=abs(n);//abs是求绝对值函数,也就是0到n的距离,用abs更精准
do{//先执行语句块再判断,先%2的余数在判断j是否除完为0
k++;//数组下标从1开始,先+1
i=j%2;//j%2的余数用i保存
j/=2;//整形j除以2不会有小数。目的是求j/2的商
x[k]=i;//x数组的k小标为刚刚模的i,也就是0或1
}while(j!=0);//判断j不等于0
for(int h=k;h>=1;--h){//h等于k,k现在就是(j)10的二进制,从k开始,因为k的下标从1开始,所以h>=1,h-1
cout<<x[h];//输出一位二进制数
}
}
int main(){
int n;//定义整形
cin>>n;//输入数字
TurnData(n);//转
return 0;
}
看见很多人数组开得好大好大,其实2进制开17个位置就够了
注:本题不写头文件和命名空间。
注:abs函数需要用到cmath头文件。
全部评论 1
啦啦啦
快快顶2023-10-03 来自 广东
0
有帮助,赞一个