题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea?tpId=37&tqId=21256&ru=/exam/oj
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Main main = new Main(); Scanner in = new Scanner(System.in); String ip = in.nextLine(); String numStr = in.nextLine(); System.out.println(main.IpToNum(ip)); System.out.println(main.NumToIp(Long.parseLong(numStr))); } // 数字转 Ip 地址 public String NumToIp(Long num){ // 转换为 二进制 字符串 String biNum = Long.toBinaryString(num); int len = biNum.length(); // 用于拼接整合结果 StringBuilder sb = new StringBuilder(); for(int i=0; i<32-len; i++){ sb.append("0"); } sb.append(biNum); // 每八位加入一个 "." sb.insert(8, "."); sb.insert(17, "."); sb.insert(26, "."); String biAn = new String(sb); String[] strs = biAn.split("\\."); int[] reduce = Arrays.stream(strs).mapToInt(string -> Integer.parseInt(string, 2)).toArray(); String ans = ""; for(int i=0; i<4; i++){ ans += reduce[i]; if(i != 3){ ans += "."; } } return ans; } public Long IpToNum(String ip){ String[] strs = ip.split("\\."); String ans = ""; // 组合 ans for(int i=0; i<4; i++){ String cur = strs[i]; int num = Integer.parseInt(cur); String biNum = Integer.toBinaryString(num); int zeroNums = 8 - biNum.length(); while(zeroNums > 0){ biNum = "0" + biNum; zeroNums--; } ans += biNum; } // 把 ans 转为 10 进制 Long ansNum = Long.parseLong(ans, 2); return ansNum; } }
思路:
两个函数, Ip 转 Num 一个, Num 转 Ip 一个
主要考察点在于字符串操作