题解 | #判断两个IP是否属于同一子网#

判断两个IP是否属于同一子网

https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String mask = in.nextLine();
            String ip1 = in.nextLine();
            String ip2 = in.nextLine();
            if(!isVaildMask(mask) || !isVaildip(ip1) || !isVaildip(ip2)){
                System.out.println(1);
            }else if(isSameSonIp(mask,ip1,ip2)){
                System.out.println(0);
            }else{
                System.out.println(2);
            }
        }
    }
    public static boolean isSameSonIp(String mask,String ip1,String ip2){
        String[] maski = mask.split("\\.");
        String[] ip1i = ip1.split("\\.");
        String[] ip2i = ip2.split("\\.");
        for(int i=0;i<maski.length;i++){
            if( ( Integer.parseInt(maski[i]) & Integer.parseInt(ip1i[i]) ) != 
              ( Integer.parseInt(maski[i]) & Integer.parseInt(ip2i[i]) ) ){
                return false;
            }
        }
        return true;
    }
    public static boolean isVaildip(String ip){
        String[] ipi = ip.split("\\.");
        if(ipi.length != 4){
            return false;
        }
        for(String ss:ipi){
            if(Integer.parseInt(ss) < 0 || Integer.parseInt(ss) > 255){
                return false;
            }
        }
        return true;
    }
    public static boolean isVaildMask(String mask){
        if(!isVaildip(mask)){
            return false;
        }
        String[] maski = mask.split("\\.");
        //将mask的每个网络号和主机号转化为2进制串,不足8位的前面补
        StringBuilder sb = new StringBuilder();
        for(String ss:maski){
            String binary = Integer.toBinaryString(Integer.parseInt(ss));
            binary = String.format("%08d",Integer.parseInt(binary));//不足的8位的补齐
            sb.append(binary);
        }
        //最后一个1在第一个0之前
        return sb.toString().lastIndexOf("1") < sb.toString().indexOf("0");
    }
}

全部评论

相关推荐

2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务