题解 | #整数与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 target = in.next(); String res; //区分ip-》整数 or 整数-》ip String[] split = target.split("\\."); if (split.length == 1) { res = numberToIp(target); } else { res = ipToNumber(target); } System.out.println(res); } } public static String numberToIp(String target) { String s = tenToTwo(target); if (s.length()<32){ int other = 32 - s.length(); StringBuilder stringBuilder = new StringBuilder(); for (int i1 = 0; i1 < other; i1++) { stringBuilder.append("0"); } s=stringBuilder+s; } StringBuilder res = new StringBuilder(); for (int i = 0,j=8; j <= 32;i=i+8,j=j+8) { String two=s.substring(i,j); String ten = twoToTen(two); res.append(ten).append("."); } return res.substring(0,res.length()-1); } public static String ipToNumber(String target) { StringBuilder res = new StringBuilder(); String[] split = target.split("\\."); for (String s : split) { String two = tenToTwo(s); int length = two.length(); if (length < 8) { int other = 8 - length; StringBuilder stringBuilder = new StringBuilder(); for (int i1 = 0; i1 < other; i1++) { stringBuilder.append("0"); } two = stringBuilder + two; } res.append(two); } return twoToTen(res.toString()); } public static String tenToTwo(String tar) { return Long.toString(Long.parseLong(tar), 2); } public static String twoToTen(String tar) { return Long.parseLong(tar, 2) + ""; } }