题解 | #整数与IP地址间的转换#

整数与IP地址间的转换

http://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

  1. 不难,我这里写得有点乱,毕竟题目出的就比较繁琐吧
  2. 注意二进制与十进制如何互相转换的
  3. 注意大数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
}


全部评论

相关推荐

Hakasee:我的简历和你的基本一样,上周去了上海,boss投了三百家, 三家线下面试 第一家没有做题,全是八股和项目,因为第一次面试不怎么熟练,挂了 第二家,给你几个题目(①css垂直居中文字,字体每两秒闪烁一下以及点击弹窗,②给你一个链接,实现可视化地图,③然后是八股,图片性能优化,以及对图片app有什么想法),45分钟内做完,然后老板面试) 第三家特别偏僻,有点阴森,到了之后让了一个工位给我,有四个题目,①格式化时间 年月日当前时间星期几② 正则表达式提取新闻文字,③在文本域输入文字生成选择题以及选项④生成商品排版还是什么来着 三家都是不超过50人的小公司 两家线上牛客笔试(卡伦特,七牛云,但是笔试不仅要考前端,还要考后端,算法,甚至数学题 我的建议是如果只做了这两个vue项目且不怎么熟练的情况下,先沉淀沉淀,把react学了,上海好的公司基本都是react查看图片
点赞 评论 收藏
分享
写不来代码的小黑:这么小的城市能有做it的公司也不容易
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务