题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
import java.util.Scanner; // 把题干的要求读完,判1的条件有两个,都要写出来, // 本题解使用sign符号作为后续是否进行比较的判断 // 因为掩码需要判断前后关系,所以使用数组存储 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { String mask = in.nextLine(); if (mask == null || mask == "") break; String ipFir = in.nextLine(); String ipSec = in.nextLine(); String[] maskNum = mask.split("\\."); String[] ipFirNum = ipFir.split("\\."); String[] ipSecNum = ipSec.split("\\."); int sign = 0; Long[] curNum = new Long[maskNum.length]; Long[] curNum2 = new Long[maskNum.length]; Long[] curNum3 = new Long[maskNum.length]; for (int i = 0; i < maskNum.length; i++) { curNum[i] = Long.parseLong(maskNum[i]); curNum2[i] = Long.parseLong(ipFirNum[i]); curNum3[i] = Long.parseLong(ipSecNum[i]); if (curNum[i] > 255 || curNum[i] < 0 || curNum2[i] > 255 || curNum2[i] < 0 || curNum3[i] > 255 || curNum3[i] < 0) { System.out.println(1); sign = 1; break; } if (i - 1 >= 0 && (curNum[i - 1] != 255 && curNum[i] != 0)) { System.out.println(1); sign = 1; break; } } if (sign == 0) { for (int i = 0; i < maskNum.length; i++) { if ((curNum[i] & curNum2[i]) != (curNum[i] & curNum3[i])) { System.out.println(2); break; } else if (i == maskNum.length - 1) { System.out.println(0); } } } } } }