题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
本题考查点在进制转换上
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void (async function () { // Write your code here let n_IP = await readline(); let n_num = await readline(); // ip -> 二进制串 -> 十进制数字 let ip_arr = n_IP.split("."); let ip_erjinzhi_str = ""; // 10进制转换为2进制后拼接的字符串 for (let i = 0; i < ip_arr.length; i++) { let tmp = parseInt(ip_arr[i]).toString(2); // 十进制转换为二进制 tmp = tmp.padStart(8,'0'); ip_erjinzhi_str += tmp; } let num_er_shi = er_str_shi(ip_erjinzhi_str); // 需要打印的十进制数字 // 十进制数字->二进制串-> ip let shi_to_er_str = parseInt(n_num).toString(2); shi_to_er_str = shi_to_er_str.padStart(32,'0'); let num_to_ip = ""; for (let f = 0; f < shi_to_er_str.length; f += 8) { let tc = shi_to_er_str.substring(f, f + 8); let tc_num_10 = er_str_shi(tc); num_to_ip = num_to_ip + tc_num_10 + '.'; } num_to_ip = num_to_ip.substring(0,num_to_ip.length-1); // 去掉最后一个点 console.log(num_er_shi); console.log(num_to_ip); })(); // 将二进制字符串转换成10进制, 有两种方法 function er_str_shi(str) { // 第二种 简单方法,0b开头表示二进制 let bin_str = '0b'+str; let shi_num = Number(bin_str); return shi_num; // 第一种笨方法 遍历累加 // let str_arr = str.split(""); // let num = 0; // for (let j = str_arr.length - 1; j >= 0; j--) { // let wei = str_arr.length - j; // 当前在倒数第几位 // if (str_arr[j] == "1") { // let need2 = wei - 1; // if (need2 == 0) { // // 最后一位 // num += 1; // } else { // let chengEr = 1; // for (let k = 0; k < need2; k++) { // chengEr *= 2; // } // num += chengEr; // } // } // } // return num; }