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

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务