s = input() # 请输入一个由1和0组成的二进制数字串
d = 0
while s:
d = d*2 + (ord(s[0]) -ord('0'))#(ord(s[0]) -ord('0'))==eval(s[0]),因为ord(s[0]) -ord('0')是在Unicode上的两者的差
s = s[1:]
print(d)
以输入1100为例进行简单分析:
1100=1*2*2*2+1*2*2+0*2+0*1
=(1*2*2+1*2+0)*2+0
=((1*2+1)*2+0) *2+ 0
可以看出,因式分解后可变为最高位乘2在加上次高位即例中的(1*2+1),然后再以此为结果往复循环。所以套用while循环可实现二进制转十进制。