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

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

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

import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String zwStr = in.next();
            String ipStr1 = in.next();
            String ipStr2 = in.next();
            if(!isLegalIP(ipStr1) ||
                !isLegalIP(ipStr2) ||
                !isLegalZY(zwStr)){
                System.out.println(1);
            } else {
                String and1 = and(zwStr, ipStr1);
                String and2 = and(zwStr, ipStr2);
                System.out.println(and1.equals(and2)?0:2);
            }

        }
    }

    public static boolean isLegalIP(String s){
        String[] ip = s.split("\\.");
        for(String i:ip){
            if(Integer.parseInt(i) < 0 || Integer.parseInt(i) > 255){
                return false;
            }
        }
        return true;
    }

    public static boolean isLegalZY(String s){
        StringBuilder sb = new StringBuilder();
        String[] zy = s.split("\\.");
        for(String z:zy){
             
             String bin = Integer.toBinaryString(Integer.parseInt(z));
             if(bin.length() != 8 && !bin.equals("0")) return false;
             sb.append(bin);
        }
        for(int i=1; i<sb.length(); i++){
            if(sb.charAt(i) == '1' && sb.charAt(i-1) == '0') return false;
        }
        return true;
    }

    public static String and(String a, String b){
        String[] arr = a.split("\\.");
        String[] brr = b.split("\\.");
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<4; i++){
            sb.append(Integer.parseInt(arr[i]) & Integer.parseInt(brr[i]));
            if(i<3) sb.append(".");
        }
        return sb.toString();
    }
}
全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
04-08 00:50
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务