题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
http://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
- 不难,我这里写得有点乱,毕竟题目出的就比较繁琐吧
- 注意二进制与十进制如何互相转换的
- 注意大数65234892保存为num形式时是科学计数法,我试图对其进行num.split拆分为数组的,但是就拆出来[1,e,+,12]一类的东西。所以就把这个数保存为字符串就好了,最后输出的时候调整格式
// 无非是十进制、二进制的互相转换。关键是十进制数转化为8位二进制整数
/*
第一种
*/
let arr = readline().split('.');
let arr1 = [];
for (let item of arr) {
arr1.push(tentoTwo(item))
}
// 将arr1中的数字转化为十进制,但是不能是数字,否则就会以科学计数法的形式表示了
let targetNum = arr1.join('')
console.log(twotoTen(targetNum))
/*
第二种:十进制转二进制
*/
let num = parseFloat(readline())
// 将其转化为32位二进制数,存在32位数组arr2中
let arr2 = new Array(32).fill(0)
let i = 31
while(num) {
arr2[i] = parseInt(num % 2);
num = parseInt(num / 2);
i--;
}
// console.log(arr2)
// 依次取8位,将其转化为十进制数
let num1 = twotoTen(arr2.slice(0, 8).join(''))
let num2 = twotoTen(arr2.slice(8, 16).join(''))
let num3 = twotoTen(arr2.slice(16, 24).join(''))
let num4 = twotoTen(arr2.slice(24, 32).join(''))
console.log(`${num1}.${num2}.${num3}.${num4}`)
function tentoTwo (num) {
let arr = new Array(8).fill(0);
let i = 7
while(num) {
arr[i] = num % 2;
num = parseInt(num / 2);
i--;
}
return arr.join('')
}
function twotoTen (num) {
let arr = num.split('');
let sum = 0, index = 1
// 啊,这里i可以是等于0的,哭哭,之前忘记了,卡了很久~!!!
for (let i = arr.length - 1; i >= 0; i--){
sum += (parseInt(arr[i]) * index)
index *= 2
}
return sum
}