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

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

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

# 判断mask是否合法, i.e.,换成2进制后, 最后一个1的位置在第一个0的前边
def validmask(mask):
    mask_str = ip2bin(mask)
    pos_1 = [i for i,v in enumerate(mask_str) if v == '1'][-1]
    pos_0 = [i for i,v in enumerate(mask_str) if v == '0'][0]
    return True if pos_0-pos_1 == 1 else False
    
# 把ip换成2进制
def ip2bin(ip):
    return ''.join([bin(k)[2::].zfill(8) for k in ip])

# 2进制"与"
def binadd(one, two):
    r = ''
    for i in range(len(one)):
        if one[i] == '1' and two[i] == '1':
            r+='1'
        else:
            r+='0'
    return r


def samesubnet(mask,ip_1,ip_2):
    mask = ip2bin(mask)
    ip_1 = ip2bin(ip_1)
    ip_2 = ip2bin(ip_2)
    
    if binadd(mask,ip_1) == binadd(mask,ip_2):
        return True
    else:
        return False
        
while True:
    try:
        mask = [int(k) for k in input().split('.') if 0<=int(k)<=255]
        ip_1 = [int(k) for k in input().split('.') if 0<=int(k)<=255]
        ip_2 = [int(k) for k in input().split('.') if 0<=int(k)<=255]

        if (len(mask) == 4 and len(ip_1) == 4 and len(ip_2) == 4) and validmask(mask):
            if samesubnet(mask,ip_1,ip_2):
                print(0)
            else:
                print(2)

        else:
            print(1)
    except:
        break

全部评论

相关推荐

dongsheng66:如果想进大厂的话,在校经历没必要占这么大篇幅,可以把专业技能单独放一个专栏写,可以加个项目经历
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务