#整数与IP地址间的转换# | 简单除法
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
m = input().split('.')
n = int(input())
ans1 = 0
for i in range(4):
ans1 += int(m[i])*2**(24-8*i)
print(ans1)
iplist = []
for i in range(4):
iplist.append(str(n//(2**(24-8*i))))
n = n%(2**(24-8*i))
ans2 = '.'.join(iplist)
print(ans2)
先假设输入的格式都是正确的。
那么对于10.0.3.193这个ip地址来说,最后一个(也就是第四个)193仅仅是先转换成二进制再转换成十进制等于没变,第i个是先转换成二进制之后在后面加(24-8*i)个二进制的0再转换成十进制,实际上就是乘2的(24-8i)次方。所以我们实际上只要把ip地址的每一段乘对应的2的次方再相加即可。
对于167773121来说则相反,ip地址的第一个实际上就是除以2**24的余数,再把167773121换成167773121%(2**24)之后对于2**16的余数就是ip地址的第二个,这样以此类推到第四个。