题解 | HJ_33#整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.util.Arrays; import java.util.Scanner; import java.util.Scanner; import java.util.stream.Collectors; // 关键在于Long.toBinaryString 和 Long.parseLong(b.toString(), 2)的使用 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String ip = in.nextLine(); Long num = in.nextLong(); System.out.println(ip2Int(ip)); System.out.println(int2Ip(num)); } public static Long ip2Int(String ip) { String[] nums = ip.split("\\."); StringBuilder b = new StringBuilder(); for (String num : nums) { String binaryString = Long.toBinaryString(Long.parseLong(num)); b.append(appendZero(binaryString)); } return Long.parseLong(b.toString(), 2); } private static String appendZero(String binaryStr) { StringBuilder result = new StringBuilder(binaryStr); int len = binaryStr.length(); if (binaryStr.length() < 8) { for (int i = 0; i < 8 - len ; i++) { result.insert(0, "0"); } } return result.toString(); } public static String int2Ip(Long num) { String binaryStr = Long.toBinaryString(num); StringBuilder ipStr = new StringBuilder(binaryStr); if (binaryStr.length() < 32) { for (int i = 0; i < 32 - binaryStr.length(); i++) { ipStr.insert(0, "0");//补0 } } String[] segments = new String[4]; int i = 0, j = 0; while (i<31) { segments[j] = ipStr.substring(i, i + 8); i = i + 8; j ++; } return Arrays.stream(segments).map(s -> String.valueOf(Long.parseLong(s, 2))).collect(Collectors.joining(".")); } }