题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
import java.util.*;
public class Main {
static List<String> list = null;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
list = new ArrayList<>();
String l1 = sc.next();
String l2 = sc.next();
String l3 = sc.next();
String[] t1 = l1.split("\\.");
String[] t2 = l2.split("\\.");
String[] t3 = l3.split("\\.");
if(!check(t1)|| !check(t2) || !check(t3) || list.get(0).contains("01")){
System.out.println("1");
}else{
String x1 = and(list.get(0) , list.get(1));
String x2 = and(list.get(0) , list.get(2));
if(x1.equals(x2)){
System.out.println("0");
}else{
System.out.println("2");
}
}
}
}
static String and(String a,String b){
StringBuilder res =new StringBuilder();
for(int i =0; i < a.length(); i++){
if(a.charAt(i) == '1' && b.charAt(i)=='1'){
res.append(1);
}else{
res.append(0);
}
}
return res.toString();
}
static boolean check(String[] t1){
boolean flag = false;
StringBuilder str = new StringBuilder();
if(t1.length != 4){
return false;
}else{
for(int i = 0; i < 4;i++){
int sum = 0;
for(int j = 0; j < t1[i].length();j++){
char t = t1[i].charAt(j);
if(!Character.isDigit(t)){
return false;
}
sum = sum * 10 + (t-'0');
}
if(sum > 255) return false;
if(flag) break;
str.append(String.format("%08d",Integer.parseInt(Integer.toBinaryString(sum))));
}
}
list.add(str.toString());
return true;
}
}