题解 | #整数与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); } }