描述: IPV4地址可以用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此正号不需要出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。现在需要你用程序来判断IP是否合法。
数据范围:数据组数:1\le t\le 18\1≤t≤18
进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(n)\O(n)
输入描述:输入一个ip地址,保证不包含空格
输出描述:返回判断的结果YES or NO
输入:
255.255.255.1000
输出:
NO
# print(int('11111111',2),int('00000000',2))
# 255 0
# print(bin(100)) 生成二进制
def exam(instr):
ins = instr
num_lis = ['.','0','1','2','3','4','5','6','7','8','9']
# print(set(ins))
# {'.', '2', '1', '5', '0'}
lis = ins.split('.')
# print(lis)
# ['', '1', '3', '8']
if len(lis) != 4:
# 分裂后发现总段数不为0段落,案例: 1.3.8
return 'NO'
for i in set(ins):
if i not in num_lis:
# -1.0.1.3
return 'NO'
for i in lis:
# 段数为4段,但内部有缺失值,在.分裂后,案例:.1.3.8
if i == '':
return 'NO'
if len(i) != 1 and i[0] == '0':
# 每个段落出现0开头的字符问题,则长度大于2且首字母为0
# 0.1.2.3是合法IP,需要再加个长度不为1判断
# 01.2.3.8
# 0.1.3.8
return 'NO'
ip = list(map(int,ins.split('.')))
# print(ip)
# [255, 255, 255, 1000]
for j in ip:
# print(j)
if j > 255:
return 'NO'
else:
continue
return 'YES'
while True:
try:
instr = input()
res = exam(instr=instr)
print(res)
except:
break
# print(bin(255))