题解 | #判断两个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是否属于同一子网#
全部评论

相关推荐

07-14 12:22
门头沟学院 Java
点赞 评论 收藏
分享
05-30 12:03
山西大学 C++
offer来了我跪着...:不是骗子,等到测评那一步就知道为啥这么高工资了
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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