题解 | #整数与IP地址间的转换#笔记丰富
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.util.*;
import java.lang.*;
/**
总结:思路没问题,就是不知道具体如何实现
1、无论是ip转整数还是整数转ip,都要对整数进行Long.parseLong()处理,因为你不知道它有多大。
2、二进制数转成long,可用方法 Long.parseLong(str,2); 其中参数str必须是字符串。
3、// 分割,最重要的是用.分割时要用 \\. \\.会转译成\. \.就是.
4、Long转成二进制字符串,可用Long.toBinaryString(num);
5、8位一取:String s = num2.substring(8 * i, 8 * i + 8);
6、Integer转String :Integer.toString(num);
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String str = in.nextLine();
if (str.contains(".")) {
System.out.println(ip2num(str));
} else {
System.out.println(num2ip(Long.parseLong(str)));
}
}
}
// 这里的long很重要,因为你不知道输入的数有多大,而Integer.parseLong(str)这种的都是把字符串转成对应的类型
public static long ip2num(String str) {
StringBuilder res = new StringBuilder();
// 分割,最重要的是用.分割时要用 \\. \\.会转译成\. \.就是.
String[] s = str.split("\\.");
// 转换二进制,补齐八位,追加到res
for (int i = 0; i < 4; i++) {
int num = Integer.parseInt(s[i]);
String num2 = Integer.toBinaryString(num);
while (num2.length() < 8) {
num2 = "0" + num2;
}
res.append(num2);
}
// 表明把res.toString()这个二进制数转换为Long
return Long.parseLong(res.toString(), 2);
}
public static String num2ip(Long num) {
// 转成二进制
String num2 = Long.toBinaryString(num);
// 补齐32位
while (num2.length() < 32) {
num2 = "0" + num2;
}
// 分割8位,转成对应的十进制字符串
String[] ans = new String[4];
for (int i = 0; i < 4; i++) {
String s = num2.substring(8 * i, 8 * i + 8);
s = Integer.toString(Integer.parseInt(s, 2));
ans[i] = s;
}
return String.join(".", ans);
}
}
查看22道真题和解析