题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
使用Long类型
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //IP地址 String str1 = sc.nextLine(); //10进制IP地址 String str2 = sc.nextLine(); //Q1. 10进制转2进制 String[] str1s = str1.split("\\."); //生成二进制串 StringBuffer binarySb = new StringBuffer(); for (String s : str1s) { String binaryStr = Integer.toBinaryString(Integer.parseInt(s)); //补齐到8位 String completeBinaryStr = Main.autoComplete(binaryStr, "0", 8); binarySb.append(completeBinaryStr); } //二进制串转十进制 Long decimalIp = Long.parseLong(binarySb + "", 2); System.out.println(decimalIp); //Q2. 2进制 转 10进制 //int binaryIP String binaryIP = Long.toBinaryString(Long.parseLong(str2)); String completedIP = Main.autoComplete(binaryIP, "0", 32); StringBuffer sb = new StringBuffer(); //seperate String sperateStr = ""; for (int i = 0; i < 4; i++) { sperateStr = completedIP.substring(i * 8, (i + 1) * 8); int sperateIp = Integer.parseInt(sperateStr, 2); sb.append(sperateIp + "."); } System.out.println(sb.substring(0, sb.length() - 1)); } public static String autoComplete(String str, String symbol, int fixedLen) { int strLen = str.length(); int neededLen = fixedLen - strLen; StringBuffer sb = new StringBuffer(); for (int i = 0; i < neededLen; i++) { sb.append(symbol); } return sb + str; } }