题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
import java.util.Scanner; //巧妙判断是否前面都是1 后面都是0的方法:最后一个1是否在第一个0前面 // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()){ // 注意 hasNext 和 hasNextLine 的区别 String []line1=in.nextLine().split("\\."); String []ip1=in.nextLine().split("\\."); String[] ip2=in.nextLine().split("\\."); int[]num1=new int[4]; int[]num2=new int[4]; boolean flag=false; boolean illgea=false; for(int i=0;i<4;i++) { int te1=(Integer.parseInt(ip1[i])&Integer.parseInt(line1[i])); int te22=(Integer.parseInt(ip2[i])&Integer.parseInt(line1[i])); if(Integer.parseInt(ip1[i])<0||Integer.parseInt(ip1[i])>255||Integer.parseInt(ip2[i])<0||Integer.parseInt(ip2[i])>255|| Integer.parseInt(line1[i])<0||Integer.parseInt(line1[i])>255) { illgea=true; break; } if(te1!=te22) {flag=true; } } if(illgea)System.out.println(1); else if(!judge(line1)) System.out.println(1); else{ if(flag) System.out.println(2); else System.out.println(0); } } } public static boolean judge(String[]line) { String binary=""; for (int i = 0; i < 4; i++) { binary+=String.format("%08d",Integer.parseInt(Integer.toBinaryString(Integer.parseInt(line[i])))); } return binary.lastIndexOf("1")<binary.indexOf("0"); } }