题解 | #整数与IP地址间的转换#

整数与IP地址间的转换

https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

10进制转换2进制

def decimalTobinary(decimal,binary_nu):
    # decimal: 10进制int
    # binary_nu: 二进制位数
    '10进制转换2进制'
    binary = ""  # 初始化二进制数为空字符串
    while decimal > 0:  # 当十进制数大于0时
        remainder = decimal % 2  # 计算余数
        binary = str(remainder) + binary  # 将余数添加到二进制数的最前面
        decimal = decimal // 2  # 更新十进制数为商
    binary = (binary_nu - len(binary))*'0' + binary
    return binary

2进制转换10进制

def binaryTodecimal(binary):
     # binary, str
    '2进制转换10进制'
    decimal = 0
    for i in range(len(binary)):
        decimal += int(binary[i]) * 2**(len(binary)-i-1)
    return decimal 

整数与IP地址间的转换

import sys
def binaryTodecimal(binary):
    '2进制转换10进制'
    # binary, str
    decimal = 0
    for i in range(len(binary)):
        decimal += int(binary[i]) * 2**(len(binary)-i-1)
    return decimal 

def decimalTobinary(decimal,binary_nu):
    # decimal: 10进制int
    # binary_nu: 二进制位数
    '10进制转换2进制'
    binary = ""  # 初始化二进制数为空字符串
    while decimal > 0:  # 当十进制数大于0时
        remainder = decimal % 2  # 计算余数
        binary = str(remainder) + binary  # 将余数添加到二进制数的最前面
        decimal = decimal // 2  # 更新十进制数为商
    binary = (binary_nu - len(binary))*'0' + binary
    return binary

def ip_int(s):
    'ip 转换10进制'
    digit_ele = [int(i) for i in s.split('.')]
    all_binary = ""
    for decimal in digit_ele:
        # 10进制转换2进制
        binary = decimalTobinary(decimal, 8)
        all_binary += binary
    # 2进制转换10进制
    return binaryTodecimal(all_binary)

def int_ip(decimal):
    '10进制转换ip'
    # 10进制转换2进制
    all_binary = decimalTobinary(decimal, 32)
    ips = []
    for i in range(0,3*8+1,8):
        ips.append(binaryTodecimal(all_binary[i:i+8]))

    return '.'.join([str(i) for i in ips])
    

for line in sys.stdin:
    s = line[:-1]
    if '.'in s:
        print(ip_int(s))
    else:
        print(int_ip(int(s)))
    

全部评论

相关推荐

敢逐云霄志:你打招呼语怎么能这么长,hr都没看下去的欲望,简明扼要说重点,就读于某某学校某某专业,26届应届毕业生,学信网可查,先后在某某公司实习过(如有),然后做过什么项目,想找一份什么样的工作,可实习几个月以上,期待您的回复。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务