题解 | #判断两个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;
let lines = [];
void async function () {
// Write your code here
while(line = await readline()){
lines.push(line);
if (lines.length == 3) {
let mask1 = lines[0].split('.').map(Number);
let mask2 = mask1.map(x => x.toString(2).padStart(8, '0')).join('');
let Ip1 = lines[1].split('.').map(Number);
let Ip2 = lines[2].split('.').map(Number);
if(Math.max(...mask1, ...Ip1, ...Ip2) <= 255 && Math.min(...mask1, ...Ip1, ...Ip2) >= 0 //验证子网掩码和Ip各段数字是否在0-255之间
&& mask2.match(/^1{1,}0{1,}/) && mask2.match(/^1{1,}0{1,}/).toString() == mask2 ){//验证子网掩码是否有效
let output = 0;
for(let i = 0; i < 4; i++) {
if ((mask1[i]&Ip1[i]) !== (mask1[i]&Ip2[i])) { // bitewise And(&)二进制运算符的运用
output = 2;
break;
}
}
console.log(output);
}
else {
console.log(1);
}
lines = [];
}
}
}()

