题目部分
题目 | IP地址转换成整数 |
难度 | 易 |
题目说明 | 存在一种虚拟 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 对应的整数,或 “invalid IP”。 |
补充说明 | 输入可能是非法的 IPv4 地址,需要对非法 IPv4(空串,还有 IP 地址中不存在的字符,非合法的 #,十进制整数不在合法区间内等)进行识别。 |
------------------------------------------------------ | |
示例 | |
示例1 | |
输入 | 100#101#1#5 |
输出 | 1684340997 |
说明 | 无 |
示例2 | |
输入 | 1#2#3 |
输出 | invalid IP |
说明 | |
解读与分析
题目解读:
输入一个字符串,把它转换成对应的整数;如果存在非法输入,则输出“invalid IP”。
分析与思路:
此题思路比较简单:
1. 判断是否为非法输入。
2. 如果非法,输出 invalid IP。如果合法,以 “#” 为分隔符,分割成 4 个整数,第一个整数 * 256 * 256 * 256,加上第二个整数 * 256 * 256,加上第三个整数 * 256,加上第 4 个整数。输出最后的结果。
代码实现
Java代码
import java.util.Scanner;
/**
* IPv4转换成整数
*
* @since 2023.11.20
* @version 0.1
* @author Frank
*
*/
public class IPv4Convert2Int {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String input = sc.nextLine();
processIPv4Convert2Int(input);
}
}
private static void processIPv4Convert2Int(String input) {
String invalidIP = "invalid IP";
if( input == null || input.length() == 0 )
{
System.out.println(invalidIP);
return;
}
String[] ipSegments = input.split( "#" );
if( ipSegments.length != 4 )
{
System.out.println(invalidIP);
return;
}
int result = 0;
for( int i = 0; i < ipSegments.length; i ++ )
{
int tmpNum;
try {
tmpNum = Integer.parseInt( ipSegments[i] );
}catch( NumberFormatException e)
{
System.out.println(invalidIP);
return;
}
if( i == 0 && ( tmpNum < 1 || tmpNum > 128 ))
{
System.out.println(invalidIP);
return;
}
if( i >= 1 && ( tmpNum < 0 || tmpNum > 255 ))
{
System.out.println(invalidIP);
return;
}
result = result * 256 + tmpNum;
}
System.out.println( result );
}
}
JavaScript代码
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {
while (line = await readline()) {
processIPv4Convert2Int(line);
}
}();
function processIPv4Convert2Int( line ) {
var invalidIP = "invalid IP";
if( line == null || line.length == 0)
{
console.log( invalidIP );
return;
}
var ipSegments = line.split("#");
if( ipSegments.length != 4 )
{
console.log( invalidIP );
return;
}
var result = 0;
for( var i = 0; i < ipSegments.length; i ++ )
{
var tmpNum = parseInt( ipSegments[i] );
if( isNaN( tmpNum ))
{
console.log( invalidIP );
return;
}
if( i == 0 && ( tmpNum < 1 || tmpNum > 128 ))
{
console.log( invalidIP );
return;
}
if( i >= 1 && ( tmpNum < 0 || tmpNum > 255 ))
{
console.log( invalidIP );
return;
}
result = result * 256 + tmpNum;
}
console.log( result );
}
(完)