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

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

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

// 边界问题需要牢记
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
const input = [];
void (async function () {
    // Write your code here
    while ((line = await readline())) {
        input.push(line);
    }
    function convertTwo(str) {
        return str
            .split(".")
            .map((e) => Number(e).toString(2).padStart(8, "0"))
            .join(".");
    }
    function isIllegal(ip) {
        return (
            ip
                .split(".")
                .map(Number)
                .findIndex((e) => e > 255 || e < 0) >= 0
        );
    }
    function isIn(mask, ip1, ip2) {
        // 检查IP有效性
        if (isIllegal(mask) || isIllegal(ip1) || isIllegal(ip2)) {
            console.log(1);
            return;
        }
        const maskArr = convertTwo(mask).split(".");
        // 检查掩码二进制
        if (!/^1+0+$/g.test(maskArr.join(""))) {
            console.log(1);
            return;
        }
        const ip1Arr = convertTwo(ip1).split(".");
        const ip2Arr = convertTwo(ip2).split(".");

        let flag = true;
        for (let i = 0; i < maskArr.length; i++) {
            if (
                (parseInt(ip1Arr[i], 2) & parseInt(maskArr[i], 2)) !==
                (parseInt(ip2Arr[i], 2) & parseInt(maskArr[i], 2))
            ) {
                flag = false;
                break;
            }
        }
        console.log(flag ? 0 : 2);
    }
    isIn(...input.slice(0, 3));
})();

全部评论

相关推荐

牛客38347925...:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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