题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
while True:
try:
subnet_mask = list(map(int,input().split(".")))
ip1 = list(map(int,input().split(".")))
ip2 = list(map(int,input().split(".")))
except EOFError:
break
else:
#将ip和子网掩码全部转换为整数
n1 = (ip1[0]<<24)|(ip1[1]<<16)|(ip1[2]<<8)|(ip1[3])
n2 = (ip2[0]<<24)|(ip2[1]<<16)|(ip2[2]<<8)|(ip1[3])
mask_int = (subnet_mask[0]<<24)|(subnet_mask[1]<<16)|(subnet_mask[2]<<8)|(subnet_mask[3])
#判断ip是否合法
valid,value = True,list(range(0,256))
for i in range(4):
if ip1[i] not in value or ip2[i] not in value or subnet_mask[i] not in value:
valid = False
break
#判断子网掩码是否合法:前缀全为1,后缀全为0
if valid:
if subnet_mask[0] != 255:
valid = False
elif '01' in bin(mask_int)[2:]:
valid = False
#开始输出结果
if valid:
if n1&mask_int == n2&mask_int:
print('0')
else:
print('2')
else:
print('1')
