【华为机试041】判断两个IP是否属于同一子网

题目描述:

子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。

Java实现:

import java.util.*;
public class Main{
    public static void main(String arg[]){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String[] mask=sc.next().split("\\.");
            String[] ip1=sc.next().split("\\.");
            String[] ip2=sc.next().split("\\.");

            if(!(check(mask)&&check(ip1)&&check(ip2))==true){
                System.out.println(1);
                return;
            }
            boolean flag=false;
            for(int i=0;i<mask.length;i++){
                if((Integer.parseInt(mask[i])&Integer.parseInt(ip1[i]))==
                        (Integer.parseInt(mask[i])&Integer.parseInt(ip2[i]))){
                    flag=true;
                }else{
                    flag=false;
                    break;
                }
            }
            if(flag){
                System.out.println(0);
            }else{
                System.out.println(2);
            }
        }

    }
    public static boolean check(String[] address){
        for(int i=0;i<address.length;i++){
            if(0>Integer.parseInt(address[i])||Integer.parseInt(address[i])>255)
                return false;
        }
        return true;
    }
}

知识点:

  • 这里判断子网掩码和IP地址合法与否仅判断是否在0~255之间,而没有判断子网掩码需要1都在前面
  • 将子网掩码和IP地址分为四段整数,依次按位&,看是否相等,只要有一段不相等,都不在同一子网内

猜你喜欢

转载自blog.csdn.net/heyiamcoming/article/details/80976710