题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.util.*;
import java.util.regex.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
ip2int(in.nextLine());
}
}
/**
* HJ33 整数与IP地址间的转换
*/
private static void ip2int(String str) {
if (!Pattern.matches("^[0-9.]+$", str)) {
return;
}
String[] arr = str.split("\\.");
if (arr.length == 1) { // 整数转换为ip 1、十进制-》二进制 2、32位按序拆为4组 3、二进制-》十进制并拼接.转换成ip
String twoRadix = Long.toString(Long.parseLong(str), 2);
if (twoRadix.length() < 32) {
twoRadix = getZeroStr(32 - twoRadix.length()) + twoRadix;
}
String ip = "";
for (int i = 0; i < 4; i++) {
ip = ip + Long.parseLong(twoRadix.substring(i * 8, (i + 1) * 8), 2);
if (i < 3) {
ip = ip + ".";
}
}
System.out.println(ip);
} else if (arr.length == 4) { // ip转换为整数
String twoRadix = "";
for (int i = 0; i < 4; i++) {
String tmp = Long.toString(Long.parseLong(arr[i]), 2);
if (tmp.length() < 8) {
tmp = getZeroStr(8 - tmp.length()) + tmp;
}
twoRadix = twoRadix + tmp;
}
System.out.println(Long.parseLong(twoRadix, 2));
}
}
// 补0
private static String getZeroStr(int num) {
String s = "";
for (int i = 0; i < num; i++) {
s += "0";
}
return s;
}
}
查看20道真题和解析
