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