华为OD机试题解析:IPv4转换与素数之积

版权申诉
0 下载量 112 浏览量 更新于2024-06-13 收藏 26KB DOCX 举报
"这篇文档包含了华为OD机试的10道真题,主要涉及JavaScript编程。其中第一题是IPv4地址转换成整数,要求处理合法的IPv4地址,并将其转换为32位整数。第二题是素数之积问题,需要找出给定32位正整数是由哪两个素数相乘得到的。" ### 1. IPv4地址转换成整数 在IPv4地址中,每个节由0到255的数字组成,且用#号分隔。对于给定的虚拟IPv4地址,我们需要确保其格式正确,并将其转换为32位整数。转换方法是将每个节的十进制数转换为二进制,不足8位时在左侧补0,然后将这些二进制数按顺序拼接起来,最后转换回十进制。 题目中给出了示例: - 输入: `100#101#1#5` - 输出: `1684340997` 在代码中,我们首先检查输入的字符串是否包含4个小节,然后逐节验证数字是否在指定范围内。对于非法的IPv4地址,返回`invalidIP`。合法的情况下,使用位移运算符`(<<)`将每个小节的值左移适当位数并累加,最终得到32位整数。 ### 2. 素数之积 题目要求对一个32位正整数进行因数分解,找出构成该数的两个素数。素数是大于1且除了1和它自身没有其他正因数的自然数。我们可以编写一个函数来检查给定数字的所有可能的素数因子,直到找到一对相乘等于原始数字的素数。 对于输入`num`,我们可以使用以下步骤来解决这个问题: 1. 创建一个素数列表,从2开始,逐步检查每个数字是否为素数。 2. 对于输入`num`,遍历素数列表,检查每个素数是否能整除`num`。 3. 如果找到一个素数`p`能整除`num`,则计算`q = num / p`,检查`q`是否也是素数。 4. 如果`q`是素数,那么`p`和`q`就是我们要找的两个素数,输出它们。 在实际实现中,通常会使用优化的素数生成算法,如Sieve of Eratosthenes,以提高效率。 这两题都考察了基本的编程能力和算法理解,尤其是对整数处理和因数分解的理解。在准备面试或笔试时,熟练掌握这些基础知识和技巧是非常重要的。