题解 | #判断两个IP是否属于同一子网#

判断两个IP是否属于同一子网

https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218

# 原理跟之前IP地址问题一样
def check_ip(ipv4):
    for item in ipv4.split('.'):
        if int(item) < 0 or int(item) > 255:
            return False
    return True


def check_mask(mask):
    if not check_ip(mask):
        return False
    mask_bin = ''.join([bin(int(item))[2:].rjust(8,'0') for item in mask.split('.')])
    if mask_bin.find('0') == -1 or mask_bin.find('1') == -1:
        return False
    if mask_bin[0:mask_bin.rfind('1')].find('0') != -1:
        return False
    return True

def check(ip1, ip2, mask):
    ip1_int = int(''.join([bin(int(item))[2:].rjust(8,'0') for item in ip1.split('.')]),base=2)
    ip2_int = int(''.join([bin(int(item))[2:].rjust(8,'0') for item in ip2.split('.')]),base=2)
    mask_int = int(''.join([bin(int(item))[2:].rjust(8,'0') for item in mask.split('.')]),base=2)
    if mask_int & ip1_int == mask_int & ip2_int:
        return True
    return False

while True:
    try:
        mask = input()
        ip_1 = input()
        ip_2 = input()
        if check_ip(ip_1) and check_ip(ip_2) and check_mask(mask):
            if check(ip_1, ip_2, mask):
                print(0)
            else:
                print(2)
        else:
            print(1)
    except:
        break

#判断两个IP是否属于同一子网#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务