题解 | #判断两个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')