题解 | 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("."));
}
}
SHEIN公司福利 828人发布