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

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

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

while True:
    try:
        mask = input()
        ip_a = input()
        ip_b = input()

        # 处理子网掩码
        def mask_process(mask):
            mask_list = mask.split(".")
            mask_2 = ""
            for i in mask_list:
                n = int(i)
                if 0 > n or n > 255:  # 判断范围是否合法
                    return '1'
                mask_2 += str(bin(n))[2:].zfill(8)  # 转换成2进制,去掉0b,补0到8位

            for j in range(len(mask_2)):  # 遍历,当出现0时,后面不能有1
                if mask_2[j] == '0': 
                    if '1' in mask_2[j:]:
                        return '1'
            return mask_2
                
        # 处理ip
        def ip_process(ip, mask_2):
            ip_list = ip.split(".")
            ip_2 = ""  # 存储2进制ip
            for i in ip_list:
                n = int(i)
                if 0 > n or n > 255:  # 判断是否合法
                    return '1'
                ip_2 += str(bin(n))[2:].zfill(8)  # 转换成2进制,去掉0b,补0到8位

            # 与操作
            ans_2 = ""
            for i in range(32):
                if ip_2[i] == '1' and mask_2[i] == '1':
                    ans_2 += '1'
                else:
                    ans_2 += '0'
            return ans_2

        m = mask_process(mask)

        if m == '1':
            print(1)
        else:
            a = ip_process(ip_a, m)
            b = ip_process(ip_b, m)

            if a == '1' or b == '1':
                print(1)
            else:
                if a == b:
                    print(0)
                else:
                    print(2)

    except:
        break

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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