题解 | #判断两个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);
}
}
}