HJ33 整数与IP地址间的转换
题目描述
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。
举例:一个ip地址为10.0.3.193
每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
数据范围:保证输入的是合法的 IP 序列
输入描述:
输入
1 输入IP地址
2 输入10进制型的IP地址
代码和思路
while True:
try:
ip = input()
num = input()
except:
break
else:
"""
如果输入的是一个ip地址,首先将字符串以.为分隔符分开,再对每一块进行
二进制转换,十进制或者其他进制转二进制时,前面会加上两个字符的前缀
所以需要切片,然后对二进制数补0,将字符串拼起来,然后转化为10进制
"""
list1 = ip.split('.')
target =str()
for i in list1:
a = bin(int(i, 10))[2:]
if len(a)<8:
s='0'*(8-len(a))+a
else:
s=a
target+=s
print(int(target,2))
"""
如果输入的是整数,先将其转化为2进制,记得分片,然后补0,
再用循环分片将其分为8个一组,对每组进行转化整数,然后变成字符串,
加入数组,用.将数组中的元素链接,形成ip地址
"""
res = []
num2=bin(int(num,10))[2:]
num2='0'*(32-len(num2))+num2 if len(num2)<32 else num2
for i in range(4):
b=num2[8*i:8*i+8]
b=str(int(b,2))
res.append(b)
print('.'.join(res))
输出描述:
输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

浙公网安备 33010602011771号