题目描述
来源
OpenJudge网站 – 百练习题集-第4039号习题
要求
总时间限制: 1000ms 内存限制: 65536kB
描述
IP地址总是由4个0-255的数字以"."隔开的形式来显示给用户,例如192.168.0.1。在计算机中,一个IP地址用4字节来依次存储其从右到左的4个数字部分,每个字节(8比特)以2进制的形式存储相应的IP地址数字,请你实现一个从IP地址的显示格式到计算机存储格式的转换。
输入
每行输入一个IP地址,如果输入为-1,结束输入
输出
每行输出一个IP地址在计算机存储中以二进制表示的4字节内容
样例输入
192.168.0.1
255.255.0.0
1.0.0.1
-1
样例输出
11000000101010000000000000000001
11111111111111110000000000000000
00000001000000000000000000000001
解题思路
- 对于每一个ip地址,解析出4个整数,从左到右依次把4个整数转换为二进制字符串,输出该二进制串。
- 题目描述中讲到,“一个IP地址用4字节来依次存储其从右到左的4个数字部分”,但样例输出中没有从右到左存储4个数字。
- 把一个整数转换为二进制字符串,可以用bin()函数。bin(1)得到’0b1’, bin(5)得到’0b101’,注意前缀有’0b’。
参考答案
while True:
ip_addr = input().strip()
if ip_addr == "-1":
break
ip_ints = [int(s) for s in ip_addr.split('.')]
ip_bin = '' #4位整数的二进制串
for n in ip_ints:
n_bin = bin(n)[2:] #bin(5)得到'0b101',前缀有'0b'
n_bin = '0' * (8 - len(n_bin)) + n_bin #左侧用0补充
ip_bin += n_bin
print(ip_bin)
测试用例
- 题目描述给出的测试用例已经覆盖了整数为0, 1, 255,以及中间数字的情形。
- 4个整数都为0的情形。
样例输入
0.0.0.0
-1
样例输出
00000000000000000000000000000000
(32个0,够难数。) - 好数一点的情形。
样例输入
255.0.255.0
-1
样例输出
11111111000000001111111100000000
小结
- 利用bin函数,简便地从整数转换为二进制字符串。如果自己编写代码实现这一转换,要费劲多了。
- 事先不知道bin函数该怎么办?我是在搜索引擎上输入“python 整数转换为二进制”,就得到线索了——Python 二进制、整数相互转化一文介绍了十进制与二进制相互转换的方法。