欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一个有意思的js算法题

程序员文章站 2022-03-01 17:28:26
...

题目:IP地址和数字之间的转换

给定 IP address: 10.0.3.193
10  -->  00001010
0   -->  00000000
3   -->  00000011
193 -->  11000001
得到
00001010 00000000 00000011 11000001
转换为10进制数为
167773121
同样给定数字167773121,也要得到ip地址10.0.3.193

我写的函数如下:

function numberAndIPaddress(s){
  if(s.indexOf(".")>0){
  var arr=s.split(".").map(function(value,index){
    return padNumber(Number(value).toString(2),8);
  });
  return ""+parseInt(arr.join(""),2);
  }else{
   reg=/\d{8}/g
   var arr =padNumber(Number(s).toString(2),32).match(reg);
   var result=arr.map(function(value){
     return parseInt(Number(value),2);
   });
   return result.join(".");
  }  
}
function padNumber(num, fill) {
    var len = ('' + num).length;
    return (Array(
        fill > len ? fill - len + 1 || 0 : 0
    ).join(0) + num);
}

罗列知识点

  • 判断是ip地址还是数字
s.indexOf('.')>0
  • 数字转化为2进制数
数字.toString(2);
  • 数字补齐位数,不足的用字符补齐补齐
function padNumber(num, fill,sep) {
    var len = ('' + num).length;
    return (Array(
        fill > len ? fill - len + 1 || 0 : 0
    ).join(sep) + num);//不足用参数传的sep填充
}
  • 转化成十进制数
parseInt(number,2);//2进制数变十进制
  • 字符串按位数切割(数字字符串)
reg=/\d{8}/g;//8位数字进行切割
var arr =s.match(reg);