题解 | Java版 又臭又长的题解(性能还低)
判断两个IP是否属于同一子网
http://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
import java.util.*; public class Main{ private static int[] help = new int[]{0,1,2}; public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNextLine()){ //防止没有输入三个数 String maskIP = in.nextLine(); if(maskIP.length() == 0) break; String ip01 = in.nextLine(); if(ip01.length() == 0) break; String ip02 = in.nextLine(); if(ip02.length() == 0) break; //判断子网掩码是否合法 boolean maskFlag = judgeMaskIP(maskIP); if(!maskFlag){ System.out.println(help[1]); continue; } boolean ip01Flag = judgeIpLegal(ip01); if(!ip01Flag){ System.out.println(help[1]); continue; } boolean ip02Flag = judgeIpLegal(ip02); if(!ip02Flag){ System.out.println(help[1]); continue; } //判断是不是在一个网段 long maskTest = stringToNum(maskIP); long ip01Test = stringToNum(ip01); long ip02Test = stringToNum(ip02); if((maskTest & ip01Test) == (maskTest & ip02Test)){ System.out.println(help[0]); }else{ System.out.println(help[2]); } } } //判断ip是否合法 public static boolean judgeIpLegal(String ip){ boolean flag = true; String[] ipTemp = ip.split("\\."); if(ipTemp.length != 4) { flag = false; return flag; } for(int i = 0; i < ipTemp.length; i++){ long tempNum = Long.parseLong(ipTemp[i]); if(!(tempNum >= 0 && tempNum <= 255)){ flag = false; return flag; } } return flag; } //判断子网掩码是否合法 【0.0.0.0】和【255.255.255.255】也不算 //掩码中间的1中如果插入了0页不是子网掩码, eg 【255.234.255.0】 public static boolean judgeMaskIP(String maskIP){ String[] maskString = maskIP.split("\\."); if(maskString.length != 4) return false; long maskTemp = arraysToNum(maskString); if(maskTemp <= 0 || maskTemp >=0XFFFFFFFFL || (((maskTemp ^ 0XFFFFFFFFL) + 1) | maskTemp)!= maskTemp){ return false; } return true; } //数组转Long public static Long arraysToNum(String[] str){ long resultNum = 0L; for(int i = 0; i < str.length; i++){ resultNum = (resultNum << 8) + Long.parseLong(str[i]); } return resultNum; } //String转Long public static Long stringToNum(String strIP){ String[] tempString = strIP.split("\\."); long resultNum = arraysToNum(tempString); return resultNum; } }