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

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

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

import java.util.Scanner;

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in);

    while(sc.hasNext()) {
        String mask = sc.nextLine();
        String ip_a = sc.nextLine();
        String ip_b = sc.nextLine();
        
        // Check if the mask is illegal
        if(judgeMask(mask) == 1) {
        // Check ip address is illegal
            if(judgeIpAddr(ip_a) == 1 && judgeIpAddr(ip_b) == 1) {
                 // Convert to long date type and compare those ips
                 Long maskq = ipConvertLong(mask);
                 Long ipA = ipConvertLong(ip_a)&maskq;
                 Long ipB = ipConvertLong(ip_b)&maskq;
                 if(ipA.equals(ipB)) {
                    System.out.println(0);
                 } else {
                    System.out.println(2);
                 }
            } else {
                System.out.println(1);
            }
        } else {
            System.out.println(1);
        }
    }
} 

private static int judgeMask(String s) {
    String[] ss = s.split("\\.");
    if(ss.length != 4) {
        return 0;
    }
    
    for(String str: ss) {
        if(Integer.parseInt(str) > 255 || Integer.parseInt(str) < 0) {
            return 0;
        }
    }
    
    for(int i = 0; i < 3; i++) {
        if(Integer.parseInt(ss[i]) > 255 || Integer.parseInt(ss[i]) < 0) {
            return 0;
        }
        if( i == 0 && Integer.parseInt(ss[i]) < 255) {
            if(Integer.parseInt(ss[i+1]) > 0) {
                return 0;
            } else if(Integer.parseInt(ss[i+2]) > 0) {
                return 0;
            } else if(Integer.parseInt(ss[i+3]) > 0) {
                return 0;
            }
        } else if( i == 1 && Integer.parseInt(ss[i]) < 255) {
            if(Integer.parseInt(ss[i+1]) > 0) {
                return 0;
            } else if(Integer.parseInt(ss[i+2]) > 0) {
                return 0;
            }
        } else if( i == 2 && Integer.parseInt(ss[i]) < 255) {
            if(Integer.parseInt(ss[i+1]) > 0) {
                return 0;
            }
        }
        
    }
    
    return 1;
}

private static int judgeIpAddr(String s) {
    String[] ss = s.split("\\.");
    if(ss.length != 4) {
        return 0;
    }
    for(String str: ss) {
        if(Integer.parseInt(str) > 255 || Integer.parseInt(str) < 0) {
            return 0;
        }
    }
    return 1;
}

private static Long ipConvertLong(String ip) {
    Long ipt= 0L;
    for(int i = 0; i < 4; i++) {
        ipt = ipt << 8 | Integer.parseInt(ip.split("\\.")[i]);
    }
    return ipt;
}

}

全部评论

相关推荐

梦倩倩:同学,瞅瞅我司,医疗独角兽,校招刚开,名额有限,先到先得,****最新动态,绿灯直达,免笔试~
我的秋招日记
点赞 评论 收藏
分享
已注销:bro不如吃顿疯狂星期四
点赞 评论 收藏
分享
10-13 22:56
门头沟学院 C++
rt,鼠鼠的浪潮网签明天过期,鼠鼠是山东人,好像自己也能接受。之前的面试大厂基本挂干净了,剩下小米二面后在泡,问了下面试官没有挂,但要泡。还有海信似乎也通过了,不过在深圳,鼠鼠也不是很想去。其它还有一些公司应该陆陆续续还有一些面试,现在有些纠结是直接签了还是再等再面呢?大佬们能不能给鼠鼠提一些意见,万分感谢!!!
牛客78696106...:浪潮可不是开摆,当初我还是开发的时候我组长跟我说他们组有段时间天天1,2点走,早上5点就来,全组肝出来心肌炎,浪潮挣钱省立花可不是说说,当然也看部门,但是浪潮普遍就那dio样,而且你算下时薪就知道不高,没事也是9点半走,不然算你旷工
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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