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

全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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