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进制内容请搜索狼蚁SEO以前的文章或继续浏览狼蚁网站SEO优化的相关文章希望大家以后多多支持狼蚁SEO!
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南