题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
String mask = in.nextLine();
String ip1 = in.nextLine();
String ip2 = in.nextLine();
if (!validMask(mask) || !validIp(ip1) || !validIp(ip2)) {
System.out.println(1);
} else {
String maskBinary=ipToBinary(mask);
String ip1Binary=ipToBinary(ip1);
String ip2Binary=ipToBinary(ip2);
long v1=Long.valueOf(maskBinary,2)&Long.valueOf(ip1Binary,2);
long v2=Long.valueOf(maskBinary,2)&Long.valueOf(ip2Binary,2);
if(v1==v2){
System.out.println(0);
}else{
System.out.println(2);
}
}
}
}
public static String ipToBinary(String ip) {
String[] iparr = ip.split("\\.");
StringBuffer sb = new StringBuffer();
Arrays.stream(iparr).forEach(s-> {
String bin=Integer.toBinaryString(Integer.valueOf(s));
if(bin.length()<8){
StringBuffer sbb=new StringBuffer();
for(int i=0;i<8-bin.length();i++){
sbb.append("0");
}
sbb.append(bin);
bin=sbb.toString();
}
sb.append(bin);
});
String maskString = sb.toString();
return maskString;
}
public static boolean validMask(String mask) {
boolean isIp=validIp(mask);
if (!isIp) {
return false;
}
String maskString=ipToBinary(mask);
char[] sarr = maskString.toCharArray();
int last1 = maskString.lastIndexOf("1");
for (int j = 0; j < sarr.length; j++) {
if (sarr[j] != '1') {
if (j-1 != last1) {
return false;
}
break;
}
}
return true;
}
public static boolean validIp(String ip) {
String[] iparr = ip.split("\\.");
for (String s : iparr) {
if (Integer.valueOf(s) > 255 || Integer.valueOf(s) < 0) {
return false;
}
}
return true;
}
}

