JS中如何进制转换成36进制,方法是什么
Admin 2022-07-20 群英技术资讯 1087 次浏览
本篇内容介绍了“JS中如何进制转换成36进制,方法是什么”的有关知识,在实际项目的操作过程或是学习过程中,不少人都会遇到这样的问题,接下来就让小编带大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们在平时写代码的时候偶尔会碰到进制转换的问题,常见的有2进制,8进制,10进制,16进制之间的转换,但是36进制却很少听过,这里就让我们用JS来简单尝试一下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;
}

仓库构建好后,我们开始分解进制转化的过程。
设立一个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
这套模板同样适用于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循环,最终就可以拿到我们想要的进制数
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了浅谈JavaScript this指向以及修改指向,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
测量执行一个函数所需的时间总是一个很好的办法,证明某些实现比另一个实现的性能更好。这也是一个很好的方法,可以确保性能没有在某些改变后受到影响,也可以追踪瓶颈。
这篇文章主要为大家介绍了JavaScript之instanceof方法手写示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
怎样用vue实现点赞动画效果?现在很多网站平台都有点赞功能,这篇文章就给大家分享怎样用vue实现一个好看的点赞动画,当点赞时,同时点亮爱心和增加点赞数,效果如下,感兴趣的朋友就继续往下看吧。
一、全局对象常用的全局对象__dirname,__filename__dirname当前模块的目录名,等同于path.dirname(__filename)__filename当前模块的文件名,这是绝对路径。 二、模块讲解1、OS模块varos=require("os");console.log("platform:",os.platform());conso
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008