不二如是 发表于 2018-4-3 17:14:43

0004 ¥ 优化十进制转成任意进制

http://xxx.fishc.com/forum/201803/20/101934b3igkgm9hgbgz0ck.gif



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

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

核心:
while (decNumber > 0){
            rem = Math.floor(decNumber % 2);
            remStack.push(rem);
            decNumber = Math.floor(decNumber / 2);
      }

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

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

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

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

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

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

    function decimalToHexadecimal(decNumber){

      var remStack = new Stack(),
            rem,
            baseString = '',
            digits = '0123456789ABCDEF';
      while (decNumber > 0){
            rem = Math.floor(decNumber % 16);
            remStack.push(rem);
            decNumber = Math.floor(decNumber / 16);
      }
      while (!remStack.isEmpty()){
            baseString += digits;
      }
      return baseString;
    }
    let hex = decimalToHexadecimal(decimal);
    document.getElementById("hexadecimal").innerHTML = hex;
</script>
</body>
</html>

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

      var remStack = new Stack(),
            rem,
            baseString = '',
            digits = '0123456789ABCDEF';

      while (decNumber > 0){
            rem = Math.floor(decNumber % base);
            remStack.push(rem);
            decNumber = Math.floor(decNumber / base);
      }

      while (!remStack.isEmpty()){
            baseString += digits;
      }

      return baseString;
    }

    let hex = decimalToHexadecimal(decimal,16);
    document.getElementById("hexadecimal").innerHTML = hex;

源码:



如果有收获,别忘了评分{:10_281:} :

http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif

这位鱼油,如果喜欢本系列学习笔记,请订阅 专辑☞(传送门)(不喜欢更要订阅{:10_297:} )

http://xxx.fishc.com/forum/201803/21/151715umqz1qoywp11wjbq.gif
页: [1]
查看完整版本: 0004 ¥ 优化十进制转成任意进制