美文网首页C语言新手家园(1万钻以下)
郑州轻工业大学oj题解(c语言)1068: 二进制数

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

作者: 缘点点 | 来源:发表于2019-12-23 16:19 被阅读0次

    写在题目前:
    今天是简书更文的第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。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/mswonctx.html