【华为OD机试 2023 B卷 | 100分】IPv4地址转换成整数(C++ Java JavaScript Python)

news/2024/7/20 18:38:13 标签: c++, java, javascript, 华为od, python

文章目录

题目描述

存在一种虚拟IPv4地址,由4小节组成,每节的范围为0~255,以#号间隔,虚拟IPv4地址可以转换为一个32位的整数,例如:

128#0#255#255,转换为32位整数的结果为2147549183(0x8000FFFF)

1#0#0#0,转换为32位整数的结果为16777216(0x01000000)

现以字符串形式给出一个虚拟IPv4地址,限制第1小节的范围为1128,即每一节范围分别为(1128)#(0255)#(0255)#(0~255),要求每个IPv4地址只能对应到唯一的整数上。如果是非法IPv4,返回invalid IP

输入描述

输入一行,虚拟IPv4地址格式字符串

输出描述

输出一行,按照要求输出整型或者特定字符

用例

输入100#101#1#5
输出1684340997
说明

C++

#include <iostream>
#include <string>
using namespace std;

int main() {
    string ip;
    getline(cin, ip); // 输入虚拟IPv4地址字符串
    int p1, p2, p3, p4;
    sscanf(ip.c_str(), "%d#%d#%d#%d", &p1, &p2, &p3, &p4); // 解析字符串为四个整数
    if (p1 >= 1 && p1 <= 128 && p2 >= 0 && p2 <= 255 && p3 >= 0 && p3 <= 255 && p4 >= 0 && p4 <= 255) {
        // 判断是否为合法的虚拟IPv4地址
        string res = "";
        int arr[4] = {p1, p2, p3, p4};
        for (int i = 0; i < 4; i++) {
            char buf[3];
            sprintf(buf, "%02X", arr[i]); // 将每个整数转换为两位16进制数
            res += buf;
        }
        cout << stoi(res, nullptr, 16) << endl; // 将16进制字符串转换为整数并输出
    } else {
        cout << "invalid IP" << endl;
    }
    return 0;
}

java_57">java

java">import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String ip = sc.nextLine(); // 输入虚拟IPv4地址字符串
        int p1, p2, p3, p4;
        String[] parts = ip.split("#");
        p1 = Integer.parseInt(parts[0]);
        p2 = Integer.parseInt(parts[1]);
        p3 = Integer.parseInt(parts[2]);
        p4 = Integer.parseInt(parts[3]); // 解析字符串为四个整数
        if (p1 >= 1 && p1 <= 128 && p2 >= 0 && p2 <= 255 && p3 >= 0 && p3 <= 255 && p4 >= 0 && p4 <= 255) {
            // 判断是否为合法的虚拟IPv4地址
            String res = "";
            int[] arr = {p1, p2, p3, p4};
            for (int i = 0; i < 4; i++) {
                String hex = Integer.toHexString(arr[i]).toUpperCase();
                if (hex.length() == 1) {
                    hex = "0" + hex;
                }
                res += hex;
            }
            System.out.println(Integer.parseInt(res, 16)); // 将16进制字符串转换为整数并输出
        } else {
            System.out.println("invalid IP");
        }
    }
}

javaScript_93">javaScript

javascript">const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', (input) => {
  const ip = input.trim(); // 输入虚拟IPv4地址字符串
  let [p1, p2, p3, p4] = ip.split("#").map(Number); // 解析字符串为四个整数
  if (p1 >= 1 && p1 <= 128 && p2 >= 0 && p2 <= 255 && p3 >= 0 && p3 <= 255 && p4 >= 0 && p4 <= 255) {
    // 判断是否为合法的虚拟IPv4地址
    let res = "";
    const arr = [p1, p2, p3, p4];
    for (let i = 0; i < 4; i++) {
      let hex = arr[i].toString(16).toUpperCase();
      if (hex.length === 1) {
        hex = "0" + hex;
      }
      res += hex;
    }
    console.log(parseInt(res, 16)); // 将16进制字符串转换为整数并输出
  } else {
    console.log("invalid IP");
  }
});

python_125">python

python">import re

ip = input()
match = re.match(r'^(\d{1,3})#(\d{1,3})#(\d{1,3})#(\d{1,3})$', ip)
if match:
    p1, p2, p3, p4 = map(int, match.groups())
    if 1 <= p1 <= 128 and 0 <= p2 <= 255 and 0 <= p3 <= 255 and 0 <= p4 <= 255:
        arr = [p1, p2, p3, p4]
        res = ''.join([hex(x)[2:].zfill(2).upper() for x in arr])
        print(int(res, 16))
    else:
        print("invalid IP")
else:
    print("invalid IP")

http://www.niftyadmin.cn/n/369906.html

相关文章

Java 基础进阶篇(十六):多线程总结

文章目录 一、多线程概述二、多线程的创建1.1 方式一&#xff1a;继承 Thread 类1.2 方式二&#xff1a;实现 Runnable 接口匿名内部类实现方案 1.3 方式三&#xff1a;JDK 5.0新增: 实现 Callable 接口1.4 三种方式对比 二、Thread的常用方法三、线程安全与同步3.1 线程安全3.…

【提示学习】HPT: Hierarchy-aware Prompt Tuning for Hierarchical Text Classification

论文信息 名称内容论文标题HPT: Hierarchy-aware Prompt Tuning for Hierarchical Text Classification论文地址https://arxiv.org/abs/2204.13413研究领域NLP, 文本分类, 提示学习, 层级标签文本分类提出模型HPT(Hierarchy-aware Prompt Tuning)来源EMNLP 2022源码https://gi…

云上高校导航 开发指引 与 注意事项

&#x1f52c; 注意事项 大部分数据存储在utils.js中的&#xff0c;页面通过引入utils.js方式渲染数据 图标全部存储在项目images文件夹里,均下载自 iconfont网站&#xff08;自行替换&#xff09; 部分图片引用自 免费图床 - CDN加速图床&#xff08;自行替换&#xff09; …

计算机体系结构标量处理机

先行控制技术 缓冲深度的设计方法 以先行指令缓冲栈为例。 假设缓冲深度为 D 1 D_1 D1​&#xff0c;考虑以下两种极端情况。 &#xff08;1&#xff09;先行指令缓冲栈已经充满&#xff0c;此时指令流出速度最快&#xff0c;例如连续分析RR型指令 &#xff0c;设这种指令序…

ADC 与温度传感器

概述 FM33A048B带有 11bit ∑ △ ADC 可 实现温度、电池电压 或其他直流信号 的 测量功能。 主要特点为 ⚫ 工作电压 2.2 5.5 V ⚫ 分辨率 11 bits ⚫ 低功耗 ⚫ 温度传感器 ⚫ 8 个外部输入通道 ⚫ 单次 转换时间 典型值 4 ms&#xff08;工作时钟 512KHz) 电压测量 测量电源…

C++实现哈希表

文章目录 前言1.哈希表的相关介绍2.哈希表的实现1.开放定址法实现哈希表1.插入2.查找3.删除 2.链地址法(开链法)实现哈希表1.插入节点2.查找3.删除4.相关的一些补充 3.封装unordered_map与unordered_set1.封装前的改造2.迭代器的实现3.unordered_map和unordered_set复用 前言 …

深入理解深度学习——正则化(Regularization):半监督学习

分类目录&#xff1a;《深入理解深度学习》总目录 在半监督学习的框架下&#xff0c; P ( x ) P(x) P(x)产生的未标记样本和 P ( x , y ) P(x, y) P(x,y)中的标记样本都用于估计 P ( y ∣ x ) P(y | x) P(y∣x)或者根据 x x x预测 y y y。在深度学习的背景下&#xff0c;半监督…

Spring BeanFactory 和 ApplicationContext

Spring BeanFactory 和 ApplicationContext BeanFactory ​ Beanfactory是Spring IOC的基本接口&#xff0c;他定义了容器最基本的功能&#xff0c;提供了对Bean的注册、获取和管理能力。 ​ BeanFactory使用延迟初始化策略&#xff0c;也就是说&#xff0c;当你从容器中获取…