题解 | #判断两个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);
        String mask = in.nextLine();
        String ip1 = in.nextLine();
        String ip2 = in.nextLine();

        

        if (!(isMaskValid(mask) && isIpValid(ip1) && isIpValid(ip2))) {
            System.out.println(1);
            return;
        }

        long maskValue = getValue(mask);
        long ip1Value = getValue(ip1);
        long ip2Vlue = getValue(ip2);
        if((ip1Value & maskValue) == (ip2Vlue & maskValue)) {
            System.out.println(0);
        } else {
            System.out.println(2);
        }
    }

    private static boolean isIpValid(String ip) {
        String[] numStrAry = ip.split("\\.");
        if (numStrAry.length != 4) {
            return false;
        }
        for (String numStr : numStrAry) {
            int num = Integer.parseInt(numStr);
            if (num < 0 || num > 255) {
                return false;
            }
        }
        return true;
    }

    private static boolean isMaskValid(String mask) {
        String[] numStrAry = mask.split("\\.");
        if (numStrAry.length != 4) {
            return false;
        }
        StringBuilder maskBinarySb = new StringBuilder();
        for (String numStr : numStrAry) {
            int num = Integer.parseInt(numStr);
            if (num < 0 || num > 255) {
                return false;
            }
            String numBinaryStr = Integer.toBinaryString(num);
            if(numBinaryStr.length() < 8) {
                for (int i = 0; i < 8 - numBinaryStr.length(); i++) {
                    maskBinarySb.append(0);
                }
            } 
            maskBinarySb.append(numBinaryStr);
        }
        return maskBinarySb.toString().matches("1*0*");
    }

    private static long getValue(String ipOrMask) {
        String[] numStrAry = ipOrMask.split("\\.");
        StringBuilder binarySb = new StringBuilder();
        for (String numStr : numStrAry) {
            String numBinaryStr = Integer.toBinaryString(Integer.parseInt(numStr));
            if(numBinaryStr.length() < 8) {
                for (int i = 0; i < 8 - numBinaryStr.length(); i++) {
                    binarySb.append(0);
                }
            } 
            binarySb.append(numBinaryStr);
        }
        return Long.parseLong(binarySb.toString(), 2);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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