本题考查点在进制转换上
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;
}

京公网安备 11010502036488号