题解 | #判断两个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");
}
}
查看10道真题和解析