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

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

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

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String mask = in.nextLine();
            String ip1 = in.nextLine();
            String ip2 = in.nextLine();
            if (!validMask(mask) || !validIp(ip1) || !validIp(ip2)) {
                System.out.println(1);
            } else {
                String maskBinary=ipToBinary(mask);
                String ip1Binary=ipToBinary(ip1);
                String ip2Binary=ipToBinary(ip2);
                long v1=Long.valueOf(maskBinary,2)&Long.valueOf(ip1Binary,2);
                long v2=Long.valueOf(maskBinary,2)&Long.valueOf(ip2Binary,2);
                if(v1==v2){
                    System.out.println(0);
                }else{
                    System.out.println(2);
                }
            }
        }
    }
    public static String ipToBinary(String ip) {
        String[] iparr = ip.split("\\.");
        StringBuffer sb = new StringBuffer();
        Arrays.stream(iparr).forEach(s-> {
            
            String bin=Integer.toBinaryString(Integer.valueOf(s));
            if(bin.length()<8){
                StringBuffer sbb=new StringBuffer();
                for(int i=0;i<8-bin.length();i++){
                    sbb.append("0");
                }
                sbb.append(bin);
                bin=sbb.toString();
            }
            sb.append(bin);
        });
        String maskString = sb.toString();
        return maskString;
    }
    public static boolean validMask(String mask) {
        boolean isIp=validIp(mask);
        if (!isIp) {
            return false;
        }
        String maskString=ipToBinary(mask);
        char[] sarr = maskString.toCharArray();
         
        int last1 = maskString.lastIndexOf("1");
        for (int j = 0; j < sarr.length; j++) {
            if (sarr[j] != '1') {
                if (j-1 != last1) {
                    return false;
                }
                break;
            }
        }
        return true;
    }
    public static boolean validIp(String ip) {
        String[] iparr = ip.split("\\.");
        for (String s : iparr) {
            if (Integer.valueOf(s) > 255 || Integer.valueOf(s) < 0) {
                return false;
            }
        }
        return true;
    }
}

全部评论

相关推荐

政委qqq:这道题在算法竞赛里唯一考的就是高精度,但是只能难住C++这类语言,Python直接a+b秒天秒地
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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