题解 | #识别有效的IP地址和掩码并进行分类统计#

识别有效的IP地址和掩码并进行分类统计

https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        int A,B,C,D,E,error,pri;
        A=B=C=D=E=error=pri=0;


        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        w:while (in.hasNextLine()) { // 注意 while 处理多个 case
            String line = in.nextLine();
            String[] split = line.split("~");

            String ip = split[0];
            String webCode = split[1];

            String[] ips = ip.split("\\.");
            String[] webcodes = webCode.split("\\.");
            int ip1,ip2,ip3,ip4;
            int wc1,wc2,wc3,wc4;
            try {
                ip1 = Integer.valueOf(ips[0]);
                ip2 = Integer.valueOf(ips[1]);
                ip3 = Integer.valueOf(ips[2]);
                ip4 = Integer.valueOf(ips[3]);

                wc1 = Integer.valueOf(webcodes[0]);
                wc2 = Integer.valueOf(webcodes[1]);
                wc3 = Integer.valueOf(webcodes[2]);
                wc4 = Integer.valueOf(webcodes[3]);
            } catch (Exception e){
                error++;
                continue;
            }

            // 非法
            if (ip1<0||ip1>255||ip2<0||ip2>255||ip3<0||ip3>255||ip4<0||ip4>255
            || wc1<0||wc1>255||wc2<0||wc2>255||wc3<0||wc3>255||wc4<0||wc4>255) {
                error++;
                continue;
            }

            // 忽略
            if (ip1==0 || ip1 == 127)
                continue;

            // 子网掩码非法
            int wc = (wc1 << 24) + (wc2 << 16) + (wc3 << 8) + wc4;
            String binStr = Integer.toBinaryString(wc);
            int bitCount = Integer.bitCount(wc);
            if (bitCount == 0 || bitCount == 32) {
                error++;
                continue;
            }
            for (int i = 0; i < bitCount; i++) {
                if ('0' == (binStr.charAt(i))) {
                    error++;
                    continue w;
                }
            }

            // 分类
            if (ip1 >= 1 && ip1 <=126) {
                A++;
            } else if (ip1<=191) {
                B++;
            } else if (ip1<=223) {
                C++;
            } else if (ip1<=239) {
                D++;
            } else {
                E++;
            }

            // 私有
            if (ip1 == 10
            || (ip1 == 172 && ip2 >= 16 && ip2 <= 31)
            || (ip1 == 192 && ip2 == 168))  {
                pri++;
            }

        }

        System.out.print(A);
        System.out.print(" ");
        System.out.print(B);
        System.out.print(" ");
        System.out.print(C);
        System.out.print(" ");
        System.out.print(D);
        System.out.print(" ");
        System.out.print(E);
        System.out.print(" ");
        System.out.print(error);
        System.out.print(" ");
        System.out.print(pri);
        System.out.println();
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务