题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
http://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String zwStr = in.next();
String ipStr1 = in.next();
String ipStr2 = in.next();
if(!isLegalIP(ipStr1) ||
!isLegalIP(ipStr2) ||
!isLegalZY(zwStr)){
System.out.println(1);
} else {
String and1 = and(zwStr, ipStr1);
String and2 = and(zwStr, ipStr2);
System.out.println(and1.equals(and2)?0:2);
}
}
}
public static boolean isLegalIP(String s){
String[] ip = s.split("\\.");
for(String i:ip){
if(Integer.parseInt(i) < 0 || Integer.parseInt(i) > 255){
return false;
}
}
return true;
}
public static boolean isLegalZY(String s){
StringBuilder sb = new StringBuilder();
String[] zy = s.split("\\.");
for(String z:zy){
String bin = Integer.toBinaryString(Integer.parseInt(z));
if(bin.length() != 8 && !bin.equals("0")) return false;
sb.append(bin);
}
for(int i=1; i<sb.length(); i++){
if(sb.charAt(i) == '1' && sb.charAt(i-1) == '0') return false;
}
return true;
}
public static String and(String a, String b){
String[] arr = a.split("\\.");
String[] brr = b.split("\\.");
StringBuilder sb = new StringBuilder();
for(int i=0; i<4; i++){
sb.append(Integer.parseInt(arr[i]) & Integer.parseInt(brr[i]));
if(i<3) sb.append(".");
}
return sb.toString();
}
}
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String zwStr = in.next();
String ipStr1 = in.next();
String ipStr2 = in.next();
if(!isLegalIP(ipStr1) ||
!isLegalIP(ipStr2) ||
!isLegalZY(zwStr)){
System.out.println(1);
} else {
String and1 = and(zwStr, ipStr1);
String and2 = and(zwStr, ipStr2);
System.out.println(and1.equals(and2)?0:2);
}
}
}
public static boolean isLegalIP(String s){
String[] ip = s.split("\\.");
for(String i:ip){
if(Integer.parseInt(i) < 0 || Integer.parseInt(i) > 255){
return false;
}
}
return true;
}
public static boolean isLegalZY(String s){
StringBuilder sb = new StringBuilder();
String[] zy = s.split("\\.");
for(String z:zy){
String bin = Integer.toBinaryString(Integer.parseInt(z));
if(bin.length() != 8 && !bin.equals("0")) return false;
sb.append(bin);
}
for(int i=1; i<sb.length(); i++){
if(sb.charAt(i) == '1' && sb.charAt(i-1) == '0') return false;
}
return true;
}
public static String and(String a, String b){
String[] arr = a.split("\\.");
String[] brr = b.split("\\.");
StringBuilder sb = new StringBuilder();
for(int i=0; i<4; i++){
sb.append(Integer.parseInt(arr[i]) & Integer.parseInt(brr[i]));
if(i<3) sb.append(".");
}
return sb.toString();
}
}