E卷-IPv4地址转换成整数-100分
E卷-刷题笔记合集🔗
题目描述
存在一种虚拟IPv4地址,由4小节组成,每节以#号间隔。每个IPv4地址可以转换为一个32位整数。
例如:
- 128#0#255#255 转换为 2147549183 (0x8000FFFF)
- 1#0#0#0 转换为 16777216 (0x01000000)
现给出一个虚拟IPv4地址字符串,要求:
- 第1小节范围为1~128
- 其他小节范围为0~255
- 每个IPv4地址只能对应到唯一的整数
如果是非法IPv4,返回"invalid IP"。
输入格式
输入一行,表示虚拟IPv4地址格式字符串。
输出格式
输出一行,表示转换后的整数或"invalid IP"。
约束说明
输入不能确保是合法的IPv4地址,需要识别以下非法情况:
- 空串
- 含有非法字符
- 非法的#分隔
- 十进制整数不在合法区间内
- 含有前导零的数字(如01)
样例输入1
100#101#1#5
样例输出1
1684340997
样例输入2
1#2#3
样例输出2
invalid IP
题解
本题的关键点在于:
-
IP地址格式验证
- 必须是4段
- 每段必须是合法数字
- 数字范围检查
- 不允许前导零
-
进制转换
- 十进制转十六进制
- 补齐前导零
- 拼接后转回十进制
-
异常处理
- 非法字符
- 段数不足
- 数字越界
- 前导零
实现思路:
-
格式检查:
- 按#分割
- 验证段数
- 检查每段格式
-
数值转换:
- 转换为十六进制
- 补齐两位
- 拼接后转十进制
-
边界处理:
- 使用long避免溢出
- 处理前导零
- 范围检查
时间复杂度: O(1)
参考代码
def solve():
# 读取输入
ip = input().strip()
# IP地址格式检查
def check_ip(ip):
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
算法刷题笔记 文章被收录于专栏
本专栏收集并整理了一些刷题笔记