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