题解 | #整数与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); //获取该字符串 String ss = in.nextLine(); String[] strs = ss.split("\\."); StringBuffer sb = new StringBuffer(); for (String str : strs) { sb.append(adjustToEightBitBinary(Integer.toBinaryString(Integer.parseInt(str)),8)); } int index = 0; long result = getTwoToTen(sb.toString()); String tenTotwo = in.nextLine(); String tenStr =adjustToEightBitBinary(Long.toBinaryString(Long.parseLong(tenTotwo)),32); String s1 = tenStr.substring(tenStr.length() - 8, tenStr.length()); String s2 = tenStr.substring(tenStr.length() - 16, tenStr.length() - 8); String s3 = tenStr.substring(tenStr.length() - 24, tenStr.length() - 16); String s4 = tenStr.substring(0, 8); StringBuffer result2 = new StringBuffer(); result2.append(getTwoToTen(s4)); result2.append("."); result2.append(getTwoToTen(s3)); result2.append("."); result2.append(getTwoToTen(s2)); result2.append("."); result2.append(getTwoToTen(s1)); System.out.println(result); System.out.println(result2); } private static String adjustToEightBitBinary(String binaryNumber,int len) { int length = binaryNumber.length(); if (length < len) { int zerosToAdd = len - length; StringBuilder sb = new StringBuilder(); for (int i = 0; i < zerosToAdd; i++) { sb.append("0"); } sb.append(binaryNumber); return sb.toString(); } else { return binaryNumber; } } public static long getTwoToTen(String sb) { int index=0; long result = 0L; for (int i = sb.length()-1; i >=0 ; i--) { if (sb.charAt(i) == '1') { result += (long)Math.pow(2, index); } index++; } return result; } }
这道题不难但是要注意的点有以下几个
1、如何将Int或者是Long转成二进制,需要记住方法Integer.toBinaryString,Long.toBinaryString
2、方法1转换过来的,不一定是8位,需要写方法补齐八位,切记切记!!!!
时间复杂度:O(n)
空间复杂度:O(n)