题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String mask = in.nextLine(); String ip1 = in.nextLine(); String ip2 = in.nextLine(); if (!(isMaskValid(mask) && isIpValid(ip1) && isIpValid(ip2))) { System.out.println(1); return; } long maskValue = getValue(mask); long ip1Value = getValue(ip1); long ip2Vlue = getValue(ip2); if((ip1Value & maskValue) == (ip2Vlue & maskValue)) { System.out.println(0); } else { System.out.println(2); } } private static boolean isIpValid(String ip) { String[] numStrAry = ip.split("\\."); if (numStrAry.length != 4) { return false; } for (String numStr : numStrAry) { int num = Integer.parseInt(numStr); if (num < 0 || num > 255) { return false; } } return true; } private static boolean isMaskValid(String mask) { String[] numStrAry = mask.split("\\."); if (numStrAry.length != 4) { return false; } StringBuilder maskBinarySb = new StringBuilder(); for (String numStr : numStrAry) { int num = Integer.parseInt(numStr); if (num < 0 || num > 255) { return false; } String numBinaryStr = Integer.toBinaryString(num); if(numBinaryStr.length() < 8) { for (int i = 0; i < 8 - numBinaryStr.length(); i++) { maskBinarySb.append(0); } } maskBinarySb.append(numBinaryStr); } return maskBinarySb.toString().matches("1*0*"); } private static long getValue(String ipOrMask) { String[] numStrAry = ipOrMask.split("\\."); StringBuilder binarySb = new StringBuilder(); for (String numStr : numStrAry) { String numBinaryStr = Integer.toBinaryString(Integer.parseInt(numStr)); if(numBinaryStr.length() < 8) { for (int i = 0; i < 8 - numBinaryStr.length(); i++) { binarySb.append(0); } } binarySb.append(numBinaryStr); } return Long.parseLong(binarySb.toString(), 2); } }