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

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

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

def checkip(ip):
    if len(ip) == 4:
        try:
            for i in range(4):
                if ip[i] < 0 or ip[i] > 255:
                    return False
            return True
        except:
            return False
    return False


def ip2bin(ip):
    bin_ip = ""
    for i in ip:
        bin_ip += bin(i)[2:].rjust(8, "0")
    return bin_ip


def checkmask(mask):
    if checkip(mask):
        s = ip2bin(mask)
        for i in range(31):
            if s[i] == "0":
                break
            if s[i + 1] == "0":
                for j in range(i + 1, 31):
                    if s[j + 1] == "1":
                        return False
                return True
        return False


while True:
    try:
        mask = list(map(int, input().split()[0].split(".")))
        ip1 = list(map(int, input().split()[0].split(".")))
        ip2 = list(map(int, input().split()[0].split(".")))
        if not checkmask(mask) or not checkip(ip1) or not checkip(ip2):
            print(1)
            continue
        bin_mask = ip2bin(mask)
        bin_ip1 = ip2bin(ip1)
        bin_ip2 = ip2bin(ip2)
        flag = True
        for i in range(32):
            if int(bin_ip1[i]) * int(bin_mask[i]) != int(bin_ip2[i]) * int(bin_mask[i]):
                print(2)
                flag = False
                break
        if flag:
            print(0)
    except:
        break

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

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