题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { String str = in.next(); //如果str中包含. if (str.contains(".")) { c1(str); } else { c2(str); } } } private static void c1(String str) { //使用,分割字符串 String[] strArr = str.split("\\."); //将字符串中的数字转换为整数 long[] longArr = new long[strArr.length]; for (int i = 0; i < strArr.length; i++) { longArr[i] = Integer.parseInt(strArr[i]); } //依次将数组中的元素转为8位的2进制,并放入StringBuilder中 StringBuilder sb = new StringBuilder(); for (int i = 0; i < longArr.length; i++) { String binaryStr = Long.toBinaryString(longArr[i]); //不足8位的在前面补0 while (binaryStr.length() < 8) { binaryStr = "0" + binaryStr; } sb.append(binaryStr); } //将最后得到的sb转为10进制 long result = Long.parseLong(sb.toString(), 2); System.out.println(result); } private static void c2(String str) { //将字符串转为整数 long num = Long.parseLong(str); //将整数转为2进制(32位) String binaryStr = Long.toBinaryString(num); //不足32位的在前面补0 while (binaryStr.length() < 32) { binaryStr = "0" + binaryStr; } //将32位的二进制字符串分为4组,每组8位 String[] strArr = new String[4]; for (int i = 0; i < 4; i++) { strArr[i] = binaryStr.substring(i * 8, (i + 1) * 8); } //将每组的二进制字符串转为整数 Long[] intArr = new Long[4]; for (int i = 0; i < 4; i++) { intArr[i] = Long.parseLong(strArr[i], 2); } //将整数转为字符串,并用.连接 StringBuilder sb = new StringBuilder(); for (int i = 0; i < 4; i++) { sb.append(intArr[i]); if (i != 3) { sb.append("."); } } System.out.println(sb.toString()); } }