HJ33 整数与IP地址间的转换qaq

106 阅读1分钟

image.png

image.png

const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});
// IP地址转10进制函数
function ipToDec(ip) {
    // 方法一:利用规律,不使用二进制数中转
    /* const arr = ip
    .split('.')
    .reverse()
    .map((item) => parseInt(item))
  return arr.reduce((sum, item, index) => {
    return sum + Math.pow(2, 8 * index) * item
  }) */
    // 方法二:用二进制数做中转
    const arr = ip.split(".").map((item) => {
        const bin = parseInt(item).toString(2);
        return "0".repeat(8 - bin.length) + bin;
    });
    return parseInt(arr.join(""), 2);
}
// 10进制转IP地址函数
function decToIp(dec) {
    // 方法一:利用规律,不使用二进制数中转
    //     const arr = []
    //     for (let i = 3; i > 0; i--) {
    //     const num = Math.floor(dec / Math.pow(2, 8 * i))
    //     dec -= Math.pow(2, 8 * i) * num
    //     arr.push(num)
    //     if (i === 1) arr.push(dec)
    //   }
    //   return arr.join('.')
    // 方法二:用二进制数做中转
    const arr = [];
    let bin = dec.toString(2);
    bin = "0".repeat(32 - bin.length) + bin;
    for (let i = 0; i < 4; i++) {
        const piece = bin.slice(i * 8, (i + 1) * 8);
        arr.push(parseInt(piece, 2));
    }
    return arr.join(".");
}
rl.on("line", function (line) {
    const res = line.includes(".") ? ipToDec(line) : decToIp(parseInt(line));
    console.log(res);
});

整数与IP地址间的转换_牛客题霸_牛客网 (nowcoder.com)