#P03038. 二进制转十进制—进阶问题
二进制转十进制—进阶问题
题目背景
进制数转十进制的方法是 加权求和法
。以二进制数 (这里的下标 表明这是一个二进制数)为例,加权求和转十进制的过程如下:
$(101101)_2 = 1\times2^5+0\times2^4+1\times2^3+1\times2^2+0\times2^1+1\times2^0=(45)_{10}$
以八进制数 为例,加权求和转十进制的过程如下:
$(7531)_8 = 7\times8^3+5\times8^2+3\times8^1+1\times8^0=(3929)_{10}$
其实十进制数也能用加权求和表示,以十进制数 为例:
$(975438)_{10}=9\times10^5+7\times10^4+5\times10^3+4\times10^2+3\times10^1+8\times10^0$
此外,还可以用下面的方法来转换,还是以二进制数 为例:
$(101101)_2 = ((((1\times2+0)\times2+1)\times2+1)\times2+0)\times2+1=(45)_{10}$
仔细分析,以最高位的 为例,一共经历了 次 的过程,其他位上数字同理,可知去掉括号整理后与加权求和算式一致。
对于二进制数,左移一位相当于 ,那么可以将上面的计算拆分成下面的过程:
- 开始时只有最高位,左移一位并且把下一位 放在末位,那就变成了,也就是 ;
- 左移一位并且把下一位 放在末位,那就变成了,也就是 ;
- 左移一位并且把下一位 放在末位,那就变成了,也就是 ;
- 左移一位并且把下一位 放在末位,那就变成了,也就是 ;
- 左移一位并且把下一位 放在末位,那就变成了,也就是 ;
🚀️ 编程时,可以考虑用下面等效的算式(相当于最高位左侧再添加一个 ):
$(0101101)_2 = (((((0\times2+1)\times2+0)\times2+1)\times2+1)\times2+0)\times2+1=(45)_{10}$
- 最高位左移一位并且把下一位 放在末位,那就变成了,就是,也就是 ;
- 左移一位并且把下一位 放在末位,那就变成了,也就是 ;
- 左移一位并且把下一位 放在末位,那就变成了,也就是 ;
- 左移一位并且把下一位 放在末位,那就变成了,也就是 ;
- 左移一位并且把下一位 放在末位,那就变成了,也就是 ;
- 左移一位并且把下一位 放在末位,那就变成了,也就是 ;
题目描述
输入一个二进制正整数,计算输出其对应的十进制数。
输入格式
一个二进制正整数。
输出格式
一个正整数。
输入输出样例
101101
45
说明/提示
👀️ 对于的数据,输入的二进制数位数不超过 ,最高位是 ,其他位是 或 。