郑州轻工业大学oj题解(c语言)1068: 二进制数

写在题目前:
今天是更文的第30天,也是日更的27天。刚更新完目录,发现自己各种题解大大小小写了也有32篇了,也算完成一个小目标了,希望接下来能继续完成100篇的目标吧~加油。


1068: 二进制数

  • 题目描述
    将一个二进制数,转换为对应的十进制数。
  • 输入
    输入一个二进制数,以回车结束。该二进制数为正数,长度不超过31。
  • 输出
    输出一个整数,为该二进制数对应的十进制数。
  • 参考代码:
#include
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。

你可能感兴趣的:(郑州轻工业大学oj题解(c语言)1068: 二进制数)