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

news/2024/11/7 10:43:11/

文章目录

      • 题目描述
      • 输入描述
      • 输出描述
      • 用例
      • C++
      • java
      • javaScript
      • 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

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

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

import reip = 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.ppmy.cn/news/99985.html

相关文章

SpringMVC框架面试专题(初级-中级)-第十节

欢迎大家一起探讨&#xff5e;如果可以帮到大家请为我点赞关注哦&#xff5e; 截止到本节关于SpringMVC的内容已经更新完毕&#xff0c;后续会更新SpringBoot框架的面试题&#xff1b;大家在背题的时候切记不要死记硬背&#xff0c;需要理解 这是什么&#xff1f;有什么操作&a…

跑通NeRF-SLAM代码记录

前言 Install 原文章github链接 下载代码 git clone https://github.com/ToniRV/NeRF-SLAM.git --recurse-submodules git submodule update --init --recursive因为有相关依赖&#xff0c;所以尽量使用命令下载代码。 2. 新建nerf-slam环境&#xff0c;github上也没提到p…

OpenCV基础操作(5)图像平滑、形态学转换、图像梯度

import numpy as np import cv2 as cv from matplotlib import pyplot as plt一、图像平滑 1、2D卷积 我们可以对 2D 图像实施低通滤波&#xff08;LPF&#xff09;&#xff0c;高通滤波&#xff08;HPF&#xff09;等。 LPF 帮助我们去除噪音&#xff0c;模糊图像。HPF 帮助…

我用GPT写了一个关于GPT的文章,大家看看写的如何

声明&#xff1a;以下内容来自GPT-3.5大模型&#xff08;图片除外&#xff09; 目录 I. 引言 1.1 研究背景和意义 1.2 现有研究综述 II. ChatGPT技术介绍 2.1 ChatGPT技术原理 2.2 ChatGPT技术优势 III. ChatGPT技术在智能客服中的应用和挑战 3.1 ChatGPT技术在智能客…

TOWER 成就徽章 NFT 系列介绍——TOWER 生态系统的第一个灵魂通证(SBT)

2022 年 7 月&#xff0c;团队推出了成就徽章 NFT 系列&#xff0c;记录每个成员在 TOWER 生态系统中的努力。这是第一个不可转让的灵魂 NFT 系列&#xff08;SBT&#xff09;&#xff0c;代表了每个玩家的独特身份。 关于灵魂通证&#xff08;SBT&#xff09; 以太坊联合创始人…

剑指 Offer 12 矩阵中的路径

题目&#xff1a; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那…

Window的创建

Window的创建 上一篇说到了Window和WindowManager的关系并且讲述了WindowManager如何添加Window与Window内部的三个方法的实现 这篇主要讲几个常见的Window的创建比如Activity,Dialog和Toast 其中Activity属于应用Window Dialog属于子Window Toast属于系统Window z-order…

开闭原则正确姿势, 使用AOP优雅的记录日志, 非常的哇塞

&#x1f473;我亲爱的各位大佬们好&#x1f618;&#x1f618;&#x1f618; ♨️本篇文章记录的为 JDK8 新特性 Stream API 进阶 相关内容&#xff0c;适合在学Java的小白,帮助新手快速上手,也适合复习中&#xff0c;面试中的大佬&#x1f649;&#x1f649;&#x1f649;。 …