华为OD(day7)

 HJ33 整数与IP地址间的转换

描述

原理: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 sys
a=input().split(".")
b=int(input())
m_b=''
for i in a:
    m_bin = bin(int(i))
    m_bi = m_bin[2::]
    if len(m_bi)< 9:
        m_bi = '0'*(8-len(m_bi)) + m_bi
    m_b = m_b + m_bi
print(int(m_b,base=2))
b_bin = bin(b)
b_bi = b_bin[2::]
if len(b_bi)<33:
    b_b = '0'*(32-len(b_bi))+ b_bi
m = [b_b[i:i+8] for i in range(0, 32, 8)]
new_x=''
for item in m:
    x = int(item,base=2)
    new_x += str(x)+"."
print(new_x[:-1])





进制转换:python 中进制转换

简洁写法:

str1 = input()  # 获取用户输入的字符串,假设是IPv4地址格式(例如"192.168.0.1")
str2 = int(input())  # 获取用户输入的整数

def encode(s: str):
    result_str = ''  # 初始化一个空字符串,用于存储二进制表示
    for char in s.split('.'):  # 将输入字符串按"."分割成列表,并遍历每个元素
        result_str += bin(int(char))[2:].zfill(8)  # 将每个元素转换为二进制字符串,去掉"0b"前缀,补齐到8位并追加到result_str中
    return int(result_str, 2)  # 将拼接后的二进制字符串转换为十进制整数并返回

def decode(s: int):
    tmp = bin(s)[2:]  # 将输入的整数转换为二进制字符串,去掉"0b"前缀
    tmp = tmp.zfill(32)  # 补齐到32位
    target = ''  # 初始化一个空字符串,用于存储解码后的IPv4地址
    for i in range(0, 32, 8):  # 每8位为一组,遍历32位二进制字符串
        target += str(int(tmp[i:i+8], 2))  # 将每8位二进制字符串转换为十进制整数,并追加到target中
        target += '.'  # 在每个整数后追加一个"."
    return target[:-1]  # 去掉最后一个"."并返回解码后的IPv4地址

print(encode(str1))  # 调用encode函数并打印结果
print(decode(str2))  # 调用decode函数并打印结果

zfill函数

①语法说明:

str.zfill(width)

其中,str表示这里要对一个字符串类型string进行操作,如果是整型、浮点型这样的数字类型,要先通过str()函数转化为字符串,才可以进行相关的操作;

           width表示进行补零之后的字符串的长度,如果补零后的长度小于或等于原字符串的长度,那么字符串将不会产生任何的变化。

注意输出形式,尤其是IP地址末尾的 . 需要删去。

import sys
import re
def IP2Ten(s):
    res=''.join([bin(int(x))[2:].rjust(8,'0') for x in s.split('.')])
    print(int(res,2))
def Ten2IP(s):
    res= bin(int(s))[2:].rjust(32,'0')
    print('.'.join([str(int(res[i*8:i*8+8],2)) for i in range(4)]))
for line in sys.stdin:
    if re.search('\.',line):
        IP2Ten(line)
    else:
        Ten2IP(line)

rjust() 返回一个原字符串右对齐,并使用指定字符填充至指定长度的新字符串,默认的填充字符为空格。如果指定的长度小于原字符串的长度则返回原字符串。

语法

rjust()方法语法:

str.rjust(width[, fillchar])

参数

  • width -- 指定填充指定字符后中字符串的总长度.

  • fillchar -- 填充的字符,默认为空格。

返回值

返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值