写在题目前:
今天是简书更文的第30天,也是日更的27天。刚更新完目录,发现自己各种题解大大小小写了也有32篇了,也算完成一个小目标了,希望接下来能继续完成100篇的目标吧~加油。
1068: 二进制数
- 题目描述
将一个二进制数,转换为对应的十进制数。 - 输入
输入一个二进制数,以回车结束。该二进制数为正数,长度不超过31。 - 输出
输出一个整数,为该二进制数对应的十进制数。 - 参考代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int d, a;
d = 0;
while( a = getchar(), a != '\n'){
d = d * 2 + (a - '0');
}
printf("%d",d);
return 0;
}
- 代码解析:
a=getchar()代表读取一个字符进入a中。这里是因为不知道输入的二进制数的长度所以只能这样去进行输入。 - 后面的d=d*2+(a-‘0’);是二进制转十进制的其中一个环节,这里使用一个递归,让二进制的每一位数不断重复此环节,并加进d中,我们最后就可以得出二进制a的十进制数d。
- 至于二进制如何转换成十进制,不懂公式的同学可以参考这篇文章。这里仅作简单的介绍:二进制从高位开始计算,第一位就是最后的商 “2/2 = 1 余0 “,余数肯定是加零。其他位数如果有”1“(原来的余数),就先乘以”2“再加”1“。
例如 100101110
1…………0
2+1=1…………余数为1
0…………1
2+0=2………… 余数为0
0 …………2
2+0=4 ………… 余数为0
1 …………4x2+1=9……………… 余数为1
0…………9x2+0=18 ……………… 余数为0
1 …………18
2+1=37 …………余数为1
1…………… 37
2+1=75…………余数为1
1………………75
2+1=151………… 余数为1
0………………151
2+0=302 ………… 余0
所以得到十进制数302。
网友评论