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

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

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String[] mask = scanner.nextLine().split("\\.");
            String[] ip1 = scanner.nextLine().split("\\.");
            String[] ip2 = scanner.nextLine().split("\\.");

            int[] maskArr = parse(mask);
            if (!checkMask(maskArr)) {
                System.out.println(1);
                continue;
            }
            int[] ip1Arr = parse(ip1);
            if (!check(ip1Arr)) {
                System.out.println(1);
                continue;
            }
            int[] ip2Arr = parse(ip2);
            if (!check(ip2Arr)) {
                System.out.println(1);
                continue;
            }

            if (isSubNet(maskArr, ip1Arr, ip2Arr)) {
                System.out.println(0);
            } else {
                System.out.println(2);
            }
        }
    }

    private static boolean isSubNet(int[] maskArr, int[] ip1Arr, int[] ip2Arr) {
        for (int i = 0; i < 4; i++) {
            if ((maskArr[i] & ip1Arr[i]) != (maskArr[i] & ip2Arr[i])) {
                return false;
            }
        }
        return true;

    }

    private static boolean check(int[] ipArr) {
        for (int i = 0; i < 4; i++) {
            if (ipArr[i] < 0 || ipArr[i] > 255) {
                return false;
            }
        }
        return true;
    }

    private static boolean checkMask(int[] maskArr) {
        String str = "";
        for (int i = 0; i < 4; i++) {
            if(maskArr[i] < 0 || maskArr[i] > 255) {
                return false;
            }
            str = str + getFullBin(maskArr[i]);
        }
        return str.lastIndexOf('1') + 1 == str.indexOf('0');
    }

    private static int[] parse(String[] mask) {
        int[] arr = new int[4];
        for (int i = 0; i < 4; i++) {
            arr[i] = Integer.parseInt(mask[i]);
        }
        return arr;
    }

    public static String getFullBin(int n) {
        String bin = Integer.toBinaryString(n);
        while (bin.length() < 8) {
            bin = bin + '0';
        }
        return bin;
    }
}
全部评论

相关推荐

02-16 10:35
已编辑
西安科技大学 后端
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务