华为OD机试真题B卷 Java 实现【IPv4地址转换成整数】,附详细解题思路

news2024/12/27 13:06:28

一、题目描述

存在一种虚拟 IPv4 地址,由4小节组成,每节的范围为0~255,以#号间隔, 虚拟 IPv4 地址可以转换为一个32位的整数,例如: 128#0#255#255,转换为32位整数的结果为2147549183(0x8000FFFF) 1#0#0#0,转换为 32 位整数的结果为16777216(0x01000000) 现以字符串形式给出一个虚拟 IPv4 地址,限制第1小节的范围为1~128, 即每一节范围分别为(1~128)#(0~255)#(0~255)#(0~255), 要求每个 IPv4 地址只能对应到唯一的整数上。 如果是非法 IPv4,返回invalid IP

备注: 输入不能确保是合法的 IPv4 地址, 需要对非法 IPv4(空串,含有 IP 地址中不存在的字符, 非合法的#分十进制,十进制整数不在合法区间内)进行识别,返回特定错误

二、输入描述

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

三、输出描述

输出以上,按照要求输出整型或者特定字符。

四、解题思路

  1. 读取输入的虚拟 IPv4 地址字符串,使用split方法将其按照"#"进行拆分,得到一个字符串数组arr,数组长度为4;
  2. 初始化变量count为0,用于记录转换后的32位整数;
  3. 初始化布尔变量flag为true,用于判断地址的合法性;
  4. 判断arr的长度是否为4,如果不为4,则将flag置为false;。
  5. 遍历arr数组,对每个字符串进行以下操作;
    • 将字符串转换为整数n。
    • 判断当前位置是否为第1小节(索引为0),如果是,则判断n是否在合法范围1~128之间,如果不是,则将flag置为false。
    • 判断n是否在合法范围0~255之间,如果不是,则将flag置为false。
    • 将n左移相应的位数(8*(3-i))并累加到count中。
  6. 根据flag的值判断地址的合法性,如果为true,则输出count;如果为false,则输出"invalid IP"。

该算法通过将虚拟 IPv4 地址转换为32位整数的方式进行处理,并同时判断地址的合法性。根据题目要求的范围限制和条件判断,遍历地址的每一节,将每一节的值转换为32位整数的对应位,并累加到count中。最后根据flag的值判断地址的合法性,并输出相应的结果。算法的时间复杂度为O(1),因为地址的长度固定为4。

五、Java算法源码

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    String[] arr = sc.nextLine().split("#");
    int len = arr.length;
    long count = 0;
    boolean flag = true;

    if(len==4){
        for(int i=0;i<len;i++){
            long n = Integer.valueOf(arr[i]);
            if(i==0 && (n<1 || n>128)){
                flag = false;
                break;
            }else if(n<0 || n>255){
                flag = false;
                break;
            }
            /**
             * 1、使用把IP地址分成4个数字: 128 199 231 44
             * 2、把每个数字转换为2进制
             * 3、如果转换后这个数字对应的二进制数不够8位,在左侧补0: 10000000 11000111 11100111 00101100
             */
            count += n<<(8*(3-i));
        }
    }else {
        flag = false;
    }

    if(flag){
        System.out.println(count);
    }else {
        System.out.println("invalid IP");
    }
}

六、效果展示

输入10#20#30#40

输出169090600

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以技术实践赋能开源安全|2023开放原子全球开源峰会开源安全技术与实践分论坛即将启幕

作为数字化转型时代的重要技术和协作模式&#xff0c;开源软件在各行各业得到广泛应用&#xff0c;由此也引发了诸多与安全相关的问题。6月12日&#xff0c;2023开放原子全球开源峰会“开源安全技术与实践”分论坛将在北京经开区北人亦创国际会展中心举行。 本次分论坛由开放原…

为什么说 Go 语言字符串是不可变的?

原文链接&#xff1a; 为什么说 Go 语言字符串是不可变的&#xff1f; 最近有读者留言说&#xff0c;平时在写代码的过程中&#xff0c;是会对字符串进行修改的&#xff0c;但网上都说 Go 语言字符串是不可变的&#xff0c;这是为什么呢&#xff1f; 这个问题本身并不困难&am…

SAP-QM-物料主数据-质量管理视图字段解析

过账到质检库存&#xff1a;要勾选&#xff0c;否则收货后库存不进入质检库存HU检验&#xff1a;收货到启用HU管理的库位时产生检验批&#xff0c;例如某个成品物料是收货到C002库位&#xff0c;该库位启用了HU管理&#xff0c;那么此处要勾选。但是如果勾选了&#xff0c;却收…

30天学会vue.js?|vue.js 3 移动应用开发实战 阅读笔记

最近又在折腾vuejs, 计划用30天的时间来掌握这个前端语言。 大概用了一周时间看完这本书。 这本书需要有编程基础的同学阅读。如果从零开始学前端的话&#xff0c;个人不建议&#xff0c;书本内容跳跃性很大&#xff0c;甚至个人觉得有点凌乱。PS&#xff1a;阅读此书一定要配…

黑马Redis视频教程实战篇(五)

目录 一、达人探店 1.1、发布探店笔记 1.2、查看探店笔记 1.3、点赞功能 1.4、点赞排行榜 二、好友关注 2.1、关注和取消关注 2.2、共同关注 2.3、Feed流实现方案 2.4、推送到粉丝收件箱 2.4、实现分页查询收邮箱 一、达人探店 1.1、发布探店笔记 发布探店笔记 探…

自定义组件和样式学习

一、使用组件3步 例如&#xff1a;APP.vue中使用另外两个组件Left.vue,Right.vue &#xff08;3个页面&#xff09; 1.在APP.vue中用import *** from **** 导入Left.vue、Right.vue页面 2.在APP.vue的js中和data同级注册&#xff0c;components{Left,Rirght} 3.注册完后可在APP…

JAVA内存深度分析报告

文章目录 理论部分&#xff1a;1.Heap Memory&#xff08;堆内存&#xff09;2.Non-heap Memory&#xff08;堆外内存&#xff09;3.Direct Memory&#xff08;直接内存&#xff09; 实验部分&#xff1a;1.Platform MXBeans API 监控快照2.MetaSpace 快照:3.Native Memory 快照…

线程池的实现原理

线程池的实现原理 所谓线程池&#xff0c;通俗的理解就是有一个池子&#xff0c;里面存放着已经创建好的线程&#xff0c;当有任务提交给线程池执行时&#xff0c;池子中的某个线程会主动执行该任务。如果池子中的线程数量不够应付数量众多的任务时&#xff0c;则需要自动扩充…

华为OD机试真题B卷 Java 实现【素数之积】,附详细解题思路

一、题目描述 RSA加密算法在网络安全世界中无处不在&#xff0c;它利用了极大整数因数分解的困难度&#xff0c;数据越大&#xff0c;安全系数越高。 给定一个32位正整数&#xff0c;请对其进行因数分解&#xff0c;找出是哪两个素数的乘积。 二、输入描述 一个正整数num …

科普:什么是小米刷机中的FASTBOOT

目录 1. 什么是手机上的FASTBOOT模式&#xff1f;2. 如何进入与退出FASTBOOT模式&#xff1f;2.1 进入方式2.2 退出方式 3. 如何在PC端安装FASTBOOT驱动&#xff1f;4. 怎么开启FASTBOOT命令提示符&#xff1f;5. 目前FASTBOOT命令有哪些类型&#xff1f;6. 常用的FASTBOOT命令…

第五章 堆内存

文章目录 前言一、&#x1f698; 本地方法1、什么是本地方法2、为什么使用 Native Method 二、&#x1f684; 本地方法栈三、&#x1f6a5; 堆内存1、-Xms10m -Xmx10m 设置堆内存的大小2、内存细分3、设置堆空间的大小与OOMjps 查看Java程序进程jstat -gc 进程号 查看堆内存参数…

CMake构建大型C/C++项目:跨平台设计与高级应用

CMake构建大型C/C项目&#xff1a;跨平台设计与高级应用 一、跨平台设计&#xff08;Cross-Platform Design&#xff09;1.1 跨平台设计原理&#xff08;Principles of Cross-Platform Design&#xff09;1.2 跨平台设计1.2.1 CMake的跨平台特性1.2.2 使用CMake进行跨编译1.2.3…

华为OD机试真题B卷 Java 实现【水仙花数】,附详细解题思路

一、题目描述 所谓水仙花数&#xff0c;是指一个n位的正整数&#xff0c;其各位数字的n次方和等于该数本身。 例如153是水仙花数&#xff0c;153是一个3位数&#xff0c;并且153 1^3 5^3 3^3。 二、输入描述 第一行输入一个整数n&#xff0c;表示一个n位的正整数。n在3到…

【计算机组成原理·笔记】系统总线概念

系统总线概念 各部件之间为了通信&#xff0c;单独连线&#xff0c;太复杂&#xff0c;于是诞生了总线的概念 基本概念 是一组能为多个部分分时共享的公共信息传送路线 总线分类 按传送方式 串行&#xff1a;在总线上1位1位的传输和接收并行&#xff1a;多位在总线上传输…

电脑计算机提示msvcp120.dll丢失该怎么修复

首先&#xff0c;让我们了解一下msvcp120.dll是什么&#xff0c;以及它的作用。msvcp120.dll是一个系统文件。它的作用是提供微软Visual C运行库的函数&#xff0c;以便应用程序可以使用这些函数来实现所需的功能。当您在运行某个程序时&#xff0c;如果发现出现了msvcp120.dll…

【备战秋招】每日一题:4月1日美团春招(二批)第五题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

面试专题:JAVA虚拟机(1)

关于Java虚拟机&#xff0c;在面试的时候一般会问的大多就是①Java内存区域、②虚拟机垃圾算法、③虚拟机垃圾收集 器、④JVM内存管理、⑤JVM调优、⑥Java类加载机制这些问题了。推荐书籍《深入理解Java虚拟机&#xff1a;JVM高级特性 与最佳实践&#xff08;第二版》、《…

嵌入式Linux驱动开发 04:基于设备树的驱动开发

文章目录 目的基础说明开发准备设备树调整驱动程序与测试总结设备树文件内容 目的 前面文章 《嵌入式Linux驱动开发 03&#xff1a;平台&#xff08;platform&#xff09;总线驱动模型》 引入了资源和驱动分离的概念&#xff0c;这篇文章将在前面基础上更进一步&#xff0c;引…

内网或者没有公网IP,如何轻松通过公网访问?

很多网友都面临一个普遍的问题&#xff0c;就是作为家庭宽带用户没有公网IP&#xff0c;即没有IP v4的公网IP&#xff0c;我们天天盼着有一天IP v6能够普及。IP v4一共有2的32次方个地址&#xff0c;约43亿&#xff0c;中国仅为7000多万个&#xff0c;IP v6一共有2的128次方个地…

MySQL8.0版本在CentOS系统的配置教程

1.安装MySQL MySQL安装完成后&#xff0c;会自动配置为名称叫做&#xff1a;mysqld的服务&#xff0c;可以被systemctl所管理&#xff0c;我们在进行系统的配置时&#xff0c;主要修改root密码和允许root远程登录。 # 通过grep命令&#xff0c;在/var/log/mysqld.log文件中&a…