(JS)将十进制的num转换成n进制

其实原理很简单,而不过是有些小问题好多时候想通了,而过了些时间又想好久才能相同,今天就将十进制数转换成n进制数在处理得到的余数输出顺序的问题进行记录,前天晚上想清,而发现今天着手想重新写一遍的时候,又花了半个小时。

普通解法:正常来说,对于初学者习惯的是用所学过得循坏来解,接下来是对不使用递归的方式解法的分析。

一个十进制数num,当想给它转换成n进制的时候需要怎样做呢?对,需要每次都给他取余数,而对于取到的余数需要对它逆序输出才能得到最终的结果,这就需要借助一个数组来记录每一个余数,然后最终对数组进行逆序输出,或者给数组就地逆置先得到逆置的数组,然后再对数组进行输出,这样就得到了最终的n进制的数。

代码实现:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 将十进制的num转换成n进制
      var arr = [],
        num = 128,
        n = 8,
        i = 0;
      while (num >= n) {
        arr[i++] = num % n;
        num = parseInt(num / n);
      }
      arr[i++] = num;
      arr.reverse();
      console.log(arr);
    </script>
  </body>
</html>

递归解法:

如果还有小可爱们不知道递归的含义,或者并没有完全理解递归,可以先看一下我的上一篇博客:递归算法思想以及简单入门的递归问题解法(JS),里面详细的讲解了初学者学习时应该对递归思想的理解方式,因为只有懂得了递归,才能更好的利用递归的思想来解题。

递归其实就是对自己的调用,而当递归中在调用他之前输出一个值得话,那样所得到的值得顺序就是正序的;而当在调用自身之后再输出呢?递归的后台执行逻辑是先会按照程序的执行顺序进行执行,但是就是因为他调用了自己,而在他之后的输出的语句就一直没有被执行,当程序遇到递归的终止条件时,它就会给当前正在运行的这个层函数进行终止,而它又开始回溯进行执行,当前函数结束,然后上一层函数也得到了结果之后进行下面的输出语句,一直回溯到我们最开始的那个函数,然后最终执行结束,这是就会发现,我们所想要的结果就这样很轻松的被输出了,根本不需要在对数组或者字符串进行逆置了,是不是感觉更简单了呢?

代码实现:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 将十进制的num转换成n进制
      function fun(num, n) {
        if (num < n) {
          console.log(num);
          return;
        }
        fun(parseInt(num / n), n);
        console.log(num % n);
      }
      fun(128, 8);
    </script>
  </body>
</html>

最后,祝小可爱们可以在编程道路上越来越好,加油哟。

猜你喜欢

转载自blog.csdn.net/dream_start_at_2017/article/details/121301884