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地址
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix