描述
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
数据范围:保证输入的是合法的 IP 序列
输入描述:
输入
1 输入IP地址
2 输入10进制型的IP地址
输出描述:
输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址
示例1
输入:
10.0.3.193 167969729
输出:
167773121 10.3.3.193
这是我一开始写的代码:
差点理解错题意了
import re
# 十进制转二进制,t是一个整数,返回补齐8位的二进制数字符串
def d_b_8(t):
t_b = []
while t / 2:
t_s = t % 2
t = t // 2
temp = str(t_s)
t_b.append(temp)
t_b.reverse()
t_str = "".join(t_b) # TypeError: sequence item 0: expected str instance, int found 原因是t_b列表是整形的
t_str_1 = t_str.rjust(8, '0') # 不够前面补0
return t_str_1
# 十进制转二进制,x是一个整数,返回补齐32位的二进制数字符串
def d_b_32(x):
x_b = []
while x / 2:
x_s = x % 2
x = x // 2
temp = str(x_s)
x_b.append(temp)
x_b.reverse()
x_str = "".join(x_b) # TypeError: sequence item 0: expected str instance, int found 原因是t_b列表是整形的
x_str_1 = x_str.rjust(32, '0') # 不够前面补0
return x_str_1
# 处理IP地址形式,n是列表
def ip_deal(n):
# print(n)
# print(type(n))
list_int = [int(i) for i in n]
# print(list_int)
str_b = ""
for j in list_int:
str_b = str_b + d_b_8(j)
print(int(str_b, 2))
# 处理整数形式,s是整数
def data_deal(s):
# print(s)
# print(type(s))
s_b = d_b_32(s)
data = []
for i in range(4):
data_1 = s_b[i * 8:(i + 1) * 8]
data_2 = int(data_1, 2)
temp = str(data_2)
data.append(temp)
# print(''.join(data))
print(data[0]+'.'+data[1]+'.'+data[2]+'.'+data[3])
# 接受处理
str_1 = input()
str_2 = input()
list_1 = str_1.split(".")
ip_deal(list_1)
data_deal(int(str_2))
# if re.findall(r'\.', str_1):
# list_1 = str_1.split(".")
# ip_deal(list_1)
# else:
# data_deal(int(str_1))
这是优化后的代码
ip = input()
num = int(input())
ip_list = ip.split(".")
ip_bin_all = ""
for i in range(4):
ip_bin = bin(int(ip_list[i]))[2:].rjust(8, '0')
ip_bin_all = ip_bin_all + ip_bin
print(int(ip_bin_all, 2))
num_bin = bin(num)[2:].rjust(32, '0')
num_ips = ""
for i in range(4):
num_ip = str(int(num_bin[i * 8:(i + 1) * 8], 2))
if i == 3:
num_ips += num_ip
else:
num_ips += num_ip+"."
print(num_ips)