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

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

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

新建两个function,一个用于验证ip是否合法,一个用于验证掩码是否合法,完整代码具体如下:
//ip验证function
function checkIp(arr) {
    //遍历ip数组,如数组元素出现小于0或大于255的数据,则return false,ip非法
    for (let i = 0; i < arr.length; i++){
        if(arr[i] < 0 || arr[i] > 255) {
            return false;
        }
    }
}
//掩码验证function
function checkMask(arr) {
    //新建基准字符串base,由左边31个‘1’和右边31个‘0’组成
    let base = '10'.padStart(32, 1).padEnd(62,0);
    //新建空数组newArr用于存储掩码数据
    let newArr = []
    //遍历掩码数组,如出现小于0,大于255的数据,则掩码非法,否则新数组newArr依次push由掩码的二进制数据(不足8位的通过padStart()方法由0补足)
    for (let i = 0; i < arr.length; i++) {
        if(arr[i] < 0 || arr[i] > 255) {
            return false;
        }
        else {
            newArr.push(parseInt(arr[i]).toString(2).padStart(8,0)); 
        }  
    }
    //得到由掩码转换而来的新数组newArr之后,验证base是否includes newArr.join(''), 如是,return true;
    if (base.includes(newArr.join(''))) {
        return true;
    }
}
//获取第一行掩码数据
while (line = readline()) {
    //将掩码转换为数组
    let mask = line.split('.')
    //获取第二行ip数据,并将其转换为数组
    let ip1 = readline().split('.');
    //获取第三行ip数据,并将其转换为数组
    let ip2 = readline().split('.');
    //如两行ip其中任意一条非法或者掩码非法,则输出1
    if (checkIp(ip1) == false || checkIp(ip2) == false || checkMask(mask) != true) {
        console.log(1)
    }
    //否则
    else {
        //如ip1 与 ip二前两个字段相同,则属于同一子网络,输出0
        if (ip1.slice(0, 2).join('') == ip2.slice(0, 2).join('')) {
            console.log(0);
        }
        //否则不属于同一子网络,输出2
        else {
            console.log(2);
        }
    } 
}

        

全部评论

相关推荐

牛客21331815...:像我一投就pass,根本不用焦虑泡池子
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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