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

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

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

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) {
            String mask = in.nextLine();
            String ip1 = in.nextLine();
            String ip2 = in.nextLine();

            if(isWrongMask(mask) || isWrongIp(ip1) || isWrongIp(ip2)){
                System.out.println(1);
                continue;
            }
            if(isSameNet(ip1,ip2, mask)){
                System.out.println(0);
                continue;
            }
            else{
                System.out.println(2);
            }
            
        }
    }

    public static boolean isWrongMask(String mask) {
        String[] masks = mask.split("\\.");
        if (masks.length != 4) {
            return true;
        }
        int[] num = new int[4];
        for (int i = 0 ; i < 4 ; ++i) {
            if (Integer.valueOf(masks[i]) < 0 || Integer.valueOf(masks[i]) > 255) {
                return true;
            } else {
                num[i] = Integer.valueOf(masks[i]);
            }
        }
        StringBuilder maskBinary = new StringBuilder();
        for (int i = 0 ; i < 4 ; ++i) {
            StringBuilder sb = new StringBuilder();
            while (num[i] > 0) {
                
                if (num[i] % 2 == 1) {
                    sb.append('1');
                } else {
                    sb.append('0');
                }
                num[i]>>=1;
            }
            while (sb.length() < 8) {
                sb.append('0');
            }
            maskBinary.append(sb.reverse());
        }
        //System.out.println(maskBinary);
        //判断是否前1后0
        for (int i = 0 ; i < maskBinary.length() - 1 ; ++i) {
            if (maskBinary.charAt(i) == '0' && maskBinary.charAt(i+1) == '1') {
                return true;
            }
        }
        return false;
    }

    public static boolean isWrongIp(String ip) {
        String[] ips = ip.split("\\.");
        if (ips.length != 4) {
            return true;
        }
        for (int i = 0 ; i < 4 ; ++i) {
            
            if (Integer.valueOf(ips[i]) < 0 || Integer.valueOf(ips[i]) > 255) {
                return true;
            }
        }
        return false;
    }


    public static boolean isSameNet(String ip1, String ip2, String mask) {
        String[] ip1s = ip1.split("\\.");
        String[] ip2s = ip2.split("\\.");
        String[] masks = mask.split("\\.");

        for(int i=0 ; i<4 ; ++i){
            int x = Integer.valueOf(ip1s[i]);
            int y = Integer.valueOf(ip2s[i]);
            int z = Integer.valueOf(masks[i]);
            if((z&x) != (z&y)){
                return false;
            }
        }
        return true;

    }
}

全部评论

相关推荐

迷茫的大四🐶:都收获五个了,兄弟那还说啥,不用改了,去玩吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务