鱼C论坛

 找回密码
 立即注册
查看: 1532|回复: 0

[庖丁解牛] 0004 ¥ 优化十进制转成任意进制

[复制链接]
发表于 2018-4-3 17:14:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

                               
登录/注册后可看大图





上一讲我们系统的实现十进制转成二进制的算法。

聪明的鱼油,一定发现了只要稍微改一点东西,就可以让十进制转成任意进制。

核心:
  1. while (decNumber > 0){
  2.             rem = Math.floor(decNumber % 2);
  3.             remStack.push(rem);
  4.             decNumber = Math.floor(decNumber / 2);
  5.         }
复制代码


只要让decNumber和其他进制的基准数字进行整除即可。

在十进制转成二进制时,余数是0或者1;

在十进制转成八进制时,余数是0或者7之间的数;

在十进制转成十六进制时,余数是0到9之间的数加上A、B、C、D、E、F。

因此需要对栈中的数字做个转化才可以。

就拿十六进制来说:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <meta name="keywords" content="小甲鱼,Web开发,HTML5,CSS3,Web编程教学">
  7.     <meta name="description" content="《零基础入门学习Web开发》案例演示">
  8.     <meta name="author" content="鱼C工作室">
  9.     <title>鱼C-数据结构与算法(JavaScript)</title>
  10.     <script src="js/stack.js"></script>
  11. </head>
  12. <body>
  13. <p>输入十进制数字为:<span id="decimal"></span>等价于十六进制:<span id="hexadecimal"></span></p>
  14. <script>
  15.     let decimal = prompt("请输入一个十进制数字");
  16.     document.getElementById("decimal").innerHTML = decimal;

  17.     function decimalToHexadecimal(decNumber){

  18.         var remStack = new Stack(),
  19.             rem,
  20.             baseString = '',
  21.             digits = '0123456789ABCDEF';
  22.         while (decNumber > 0){
  23.             rem = Math.floor(decNumber % 16);
  24.             remStack.push(rem);
  25.             decNumber = Math.floor(decNumber / 16);
  26.         }
  27.         while (!remStack.isEmpty()){
  28.             baseString += digits[remStack.pop()];
  29.         }
  30.         return baseString;
  31.     }
  32.     let hex = decimalToHexadecimal(decimal);
  33.     document.getElementById("hexadecimal").innerHTML = hex;
  34. </script>
  35. </body>
  36. </html>
复制代码


其实decimalToHexadecimal()再指定一个进制类型base,就能封装一个十进制任意转换的方法:
  1. function decimalToHexadecimal(decNumber,base){

  2.         var remStack = new Stack(),
  3.             rem,
  4.             baseString = '',
  5.             digits = '0123456789ABCDEF';

  6.         while (decNumber > 0){
  7.             rem = Math.floor(decNumber % base);
  8.             remStack.push(rem);
  9.             decNumber = Math.floor(decNumber / base);
  10.         }

  11.         while (!remStack.isEmpty()){
  12.             baseString += digits[remStack.pop()];
  13.         }

  14.         return baseString;
  15.     }

  16.     let hex = decimalToHexadecimal(decimal,16);
  17.     document.getElementById("hexadecimal").innerHTML = hex;
复制代码


源码: Archive.zip (1.17 KB, 下载次数: 1, 售价: 11 鱼币)




如果有收获,别忘了评分


                               
登录/注册后可看大图


这位鱼油,如果喜欢本系列学习笔记,请订阅 专辑&#9758;传送门)(不喜欢更要订阅



                               
登录/注册后可看大图

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 08:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表