题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
http://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
##一、 输入IP地址,输出转换成10进制的IP地址
i1=list(map(int,input().split('.')))# int()不能直接以字符串列表为目标
n1=''
for k in i1:# 遍历IP地址每个部分
n1=n1+'0'*(8-len(str(bin(k))[2:]))+str(bin(k))[2:]# 把IP地址每个部分便二进制后补0后变字符串相加
out1=int(n1,2)
##二、输入10进制型的IP地址,输出转换后的IP地址
i2=int(input())
if len(str(bin(i2))[2:])==32:
n2=str(bin(i2))[2:]
else:
n2='0'*(8-len(str(bin(i2))[2:])%8)+str(bin(i2))[2:]# 首段补0成8的倍数,方便后面分组
w=len(n2)//8# 看该二进制长串可以分几份,其实就是4,因为ipv4就是4份= =|||
tem=[]# 用于存放ipv4中每部分的数字,最后用'.'连接起来
for j in range(w):
tem.append(int(n2[j*8:(j+1)*8],2))# 把每份二进制子串用int(,2)转换成十进制存入tem列表
out2='.'.join(map(str,tem))
print(out1)
print(out2)
i1=list(map(int,input().split('.')))# int()不能直接以字符串列表为目标
n1=''
for k in i1:# 遍历IP地址每个部分
n1=n1+'0'*(8-len(str(bin(k))[2:]))+str(bin(k))[2:]# 把IP地址每个部分便二进制后补0后变字符串相加
out1=int(n1,2)
##二、输入10进制型的IP地址,输出转换后的IP地址
i2=int(input())
if len(str(bin(i2))[2:])==32:
n2=str(bin(i2))[2:]
else:
n2='0'*(8-len(str(bin(i2))[2:])%8)+str(bin(i2))[2:]# 首段补0成8的倍数,方便后面分组
w=len(n2)//8# 看该二进制长串可以分几份,其实就是4,因为ipv4就是4份= =|||
tem=[]# 用于存放ipv4中每部分的数字,最后用'.'连接起来
for j in range(w):
tem.append(int(n2[j*8:(j+1)*8],2))# 把每份二进制子串用int(,2)转换成十进制存入tem列表
out2='.'.join(map(str,tem))
print(out1)
print(out2)
【牛客站内】华为机试题—中等 文章被收录于专栏
【牛客站内】华为机试题练习记录