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