题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
while True:
try:
s1 = input().split('.')
s2 = input().split('.')
s3 = input().split('.')
s4 = ''
for i in s1:
s4 += bin(int(i))[2:]
s4 = s4.lstrip('1') #把子网掩码第一个0前面的1全去掉了,后面不能有1了,当然第一个数也不能有0
for i in range(len(s1)):
s1[i] = int(s1[i])
s2[i] = int(s2[i])
s3[i] = int(s3[i])
if s1[0] != 255 or'1' in s4 or max(s1+s2+s3) > 255 or min(s1+s2+s3) < 0:
print(1)
else:
a = []
b = []
for i in range(len(s2)):
a.append(s1[i]&s2[i])
b.append(s1[i]&s3[i]) #十进制默认可以&运算,应该自动转2进制运算完再返回十进制的
if a == b:
print(0)
else:
print(2)
except:
break
这个题有两个可以说的点:1. 判别子网掩码和ip地址是否合法
(1子网掩码)我用的方法是把第一个0前面的1全部去掉看看后面是否有1,有的话子网掩码就不合法其实,但是第一个数的二进制也不能有0,即第一个数还是得是255
(2 ip地址)我借鉴别人的把三个list合成长list然后看里面有没有不合法(>255 or <0)的数
2. 十进制直接&运算
OPPO公司福利 1202人发布