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

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

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

# sub_net = list(map(int, input().split(".")))
# ip1 = list(map(int, input().split(".")))
# ip2 = list(map(int, input().split(".")))

# while True:
#     b_flag = False
#     sn_flag = 1
#     break_flag = False
#     sn_bin = ''
#     ip1_bin = ''
#     ip2_bin = ''
#     for i in range(len(sub_net)):
#         if sub_net[i]<0 or sub_net[i]>255 or ip1[i]<0 or ip1[i]>255 or ip2[i]<0 or ip2[i]>255:
#             print(1)
#             b_flag = True
#             break            
#         else:
#             sn_bin += bin(sub_net[i])[2:].rjust(8, "0")
#             ip1_bin += bin(ip1[i])[2:].rjust(8, "0")
#             ip2_bin += bin(ip2[i])[2:].rjust(8, "0")
try:
    mask = input().split('.')
    ip1 = input().split('.')
    ip2 = input().split('.')

    def check_mask(mask):
        L = ''
        for mask_slice in mask:
            if int(mask_slice) < 0 or int(mask_slice) > 255:
                return False
            else:
                L = L + bin(int(mask_slice))[2:].rjust(8, '0')
        # print(L)
        if (not '1' in L) or (not '0' in L):
            return False
        elif L.rfind('1') != (L.find('0') - 1):
            return False
        else:
            return True

    def check_ip(ip):
        for ip_slice in ip:
            if int(ip_slice) < 0 or int(ip_slice) > 255:
                return False
        return True

    def ip2bin(ip):
        L = ''
        for ip_slice in ip:
            L = L + bin(int(ip_slice))[2:].rjust(8, '0')
        return L

    if check_mask(mask):
        if check_ip(ip1) and check_ip(ip2):
            ip1_bin = ip2bin(ip1)
            ip2_bin = ip2bin(ip2)
            mask_bin = ip2bin(mask)
            flag = True
            for i in range(32):
                if (int(ip1_bin[i]) and int(mask_bin[i])) != (int(ip2_bin[i]) and int(mask_bin[i])):
                    flag = False
                    break
            if flag:
                print(0)
            else:
                print(2)
        else:
            print(1)
    else:
        # print('mask error')
        print(1)
except:
    pass

全部评论

相关推荐

vip牛牛:测试吧,开发现在至少212
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务