JS 实现10进制转换36进制的示例代码

 更新时间:2021年04月18日 08:43:39   作者:YU_yu  
这篇文章主要介绍了JS实现10进制转换36进制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

我们在平时写代码的时候偶尔会碰到进制转换的问题,常见的有2进制,8进制,10进制,16进制之间的转换,但是36进制却很少听过,这里就让我们用JS来简单尝试一下36进制的实现吧

思考

36进制数的构成

在开始前,我们需要先理清楚36进制的数字组成,这样我们才能对36进制数有一个清晰的认识以及后续对数字的转化。我们都知道,16进制数是由 0-9 以及a-f 之间的字符所构成,那么36进制呢?,将 a-f 继续后推20位,显而易见,它的字母部分正好由a-z 26个英文字母构成,所以36进制数是由 0-9,a-z 所组成的

数值准备

理清楚它的组成后,开始思考,一个10进制数经过怎样的转化可以成为一个36进制数呢? 我们需要先准备一个有36个数值的“仓库”数组,这个数组用来存放36进制数的所有数值,当10进制数需要进行进制转换的时候,根据数值进入这个仓库取出36进制数的值,在仓库中,0-9代表36进制数的0-9,10-35代表36进制数的a-z。代码如下

function getNums36() {
  var nums36 = [];
  for(var i = 0; i < 36 ; i++) {
    if(i >= 0 && i <= 9) { // 存入0-9的数值
      nums36.push(i) 
    } else {  // 存入a-z的数值
      nums36.push(String.fromCharCode(i + 87));  // ASCII码转换
    }
  }
  console.log(nums36,'--------');  // 检查仓库的值
  return nums36; 
}

实现

仓库构建好后,我们开始分解进制转化的过程。

  • 首先对传入的10进制数进行检测,先进行浮点数判断,由于这里不讨论浮点数的进制转换,所以直接返回。其次,进行负数的检测和处理,如果 n 为负数,调用Math.abs()方法将 n 转化为正数。
  • 检测完成后,开始进行转换

设立一个while循环,while内部首先对 n 值做36的取余处理,得到 res ,

var res = n % 36;

这里是要获得这个10进制数转换为36进制数的最低位的值,将res抛入仓库中,取得36进制对应的数值,用unshift存入arr首位。

arr.unshift(nums36[res]);

最低位处理完后,我们需要对这个数进行进位,处理更高位数的值

n = parseInt(n/36);

至此,完成一轮循环

我们用while不断对 n 进行 res 的数值取余并不断进位,最后,可以将10进制数转化为36进制数

注意,此时记得将之前设置的neg的负数判断载首位加上

arr.unshift(neg)

最后,返回36进制数

return arr.join("");

代码

// 提供36位的表达 0-9 a-z
function getNums36() {
  var nums36 = [];
  for(var i = 0; i < 36 ; i++) {
    if(i >= 0 && i <= 9) {
      nums36.push(i)
    } else {
      nums36.push(String.fromCharCode(i + 87));
    }
  }
  return nums36;
}
function scale36(n) {
  // 单独的功能函数
  // 16进制数: 0-9  a-f    36进制数: 0-9  a-z   
  const arr = [];
  var nums36 = getNums36();
  // 36 10
  if(!Number.isInteger(n)){//浮点数判断,目前不支持小鼠
    console.warn('不支持小数转换');
    return n;
  } 
  var neg = '';
  if(n < 0){//对负数的处理
      neg = '-';
      n = Math.abs(n)
  }
  while(n) {
    var res = n % 36;
    console.log(res,'+++++++');
    arr.unshift(nums36[res]);
    // 进位
    n = parseInt(n/36);
    console.log(n,'---------');
  }
  arr.unshift(neg)
  return arr.join("");

}

console.log(scale36(20)); // 10

扩展

7进制数的实现

这套模板同样适用于10进制对其他进制的转换,我们只需要修改一下仓库的数值,这里以一道LeetCode的7进制题目为例

504. 七进制数
给定一个整数,将其转化为7进制,并以字符串形式输出。

示例 1:
输入: 100 输出: "202"

先准备7进制数的数值仓库

function getNums7() {
  var nums7 = [];
  for(var i = 0; i < 7 ; i++) {
    
      nums7.push(i)
   
  }
  return nums7;
}

再对取余的数值以及进位进行修改,就可以完成模板复用了

var res = n % 7;
n = parseInt(n/7);

代码
function getNums7() {
  var nums7 = [];
  for(var i = 0; i < 7 ; i++) {
    
      nums7.push(i)
   
  }
  return nums7;
}
var convertToBase7 = function(num) {
  // 单独的功能函数
  
  const arr = [];
  var nums7 = getNums7();
  var neg = '';
  if(num < 0){//对负数的处理
      neg = '-';
      num = Math.abs(num)
  }
  if(num == 0) {
      return  num + "";
  }
  
  while(num) {
    var res = num % 7;  // 对高位数据进行截取
    arr.unshift(nums7[res]);  
    // 进位
    num = parseInt(num/7); 
  }
  arr.unshift(neg);
  return arr.join("");

}

小结

从这个例子可以看出,只要稍加修改,我们就可以举一反三完成10进制对其他进制的随意转换,核心在于 res 的取余 以及 仓库数值的构建 ,我们通过不断进位和while循环,最终就可以拿到我们想要的进制数

到此这篇关于JS 实现10进制转换36进制的文章就介绍到这了,更多相关JS 实现10进制转换36进制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解

    JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解

    这篇文章主要介绍了JavaScript浏览器对象模型BOM(BrowserObjectModel),结合实例形式较为详细的分析了BOM模型的常用对象与相关使用技巧,需要的朋友可以参考下
    2016-11-11
  • open 动态修改img的onclick事件示例代码

    open 动态修改img的onclick事件示例代码

    动态修改img的onclick事件,使用open也可轻松做到,下面有个不错的示例,需要的朋友可以参考下
    2013-11-11
  • 在layui.use 中自定义 function 的正确方法

    在layui.use 中自定义 function 的正确方法

    今天小编就为大家分享一篇在layui.use 中自定义 function 的正确方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • webpack的tree shaking的实现方法

    webpack的tree shaking的实现方法

    这篇文章主要介绍了webpack的tree shaking的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • TypeScript中类的基础概念和使用详解

    TypeScript中类的基础概念和使用详解

    这篇文章主要为大家详细介绍了TypeScript 中类的概念和用法,文中的示例代码讲解详细,希望能帮助大家更好地理解和运用 TypeScript 中的类
    2023-06-06
  • 使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享

    使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享

    这篇文章主要介绍了使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享,编写半透明遮罩层时要注意定位问题、不要满屏遮罩,需要的朋友可以参考下
    2016-05-05
  • 微信小程序获取当前时间及星期几的实例代码

    微信小程序获取当前时间及星期几的实例代码

    这篇文章主要给大家介绍了关于利用微信小程序获取当前时间及星期几的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 常见JS验证脚本汇总

    常见JS验证脚本汇总

    这篇文章主要介绍了常见JS验证脚本,结合实例形式汇总分析了JavaScript用于验证的系统自带函数与自定义函数,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • js 取时间差去掉周六周日实现代码

    js 取时间差去掉周六周日实现代码

    js 求时间差在生活中经常会触及到,本文整理了一些,希望可以帮助有需求的朋友可以,而起还可以实现去掉周六周日这些东东,废话不多说,进入正题
    2012-12-12
  • 解决在Bootstrap模糊框中使用WebUploader的问题

    解决在Bootstrap模糊框中使用WebUploader的问题

    这篇文章主要介绍了在Bootstrap模糊框中使用WebUploader的问题及解决方法,,需要的朋友可以参考下
    2018-03-03

最新评论