Home  >  Q&A  >  body text

javascript算法题,26个字母和数字转换,怎么做?

找出下面代码的规律并且编写一个函数,转换特定的整数到对应的字符串。
1 => A,2 => B,3 => C,...,26 => Z,27 => AA,28 => AB,29 => AC,...,52 => AZ,53 => BA,...

function convert (num) {
} 

convert函数怎么写?这道题怎么做?有会的吗?

伊谢尔伦伊谢尔伦2750 days ago1171

reply all(11)I'll reply

  • 巴扎黑

    巴扎黑2017-04-11 12:46:31

    function convert(num){
                var result = [];
                while(num){
                    var t = num % 26;
                    if(!t){
                        t = 26;
                        -- num;
                    }    
                    result.push(String.fromCodePoint(t + 64));
                    num = ~~(num / 26);
                }
                return result.reverse().join('');
            }

    这是不是leetcode上面的。。

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-11 12:46:31

    总而言之一句话:

    function convert(num){
        return num <= 26 ? 
             String.fromCharCode(num + 64) : convert(~~((num - 1) / 26)) + convert(num % 26 || 26);
    }

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-11 12:46:31

    这样可以吗

    function convert (num) {
      var s = ''
      while (num > 0) {
        var m = num % 26
        if (m === 0) m = 26
        s = (m + 9).toString(36) + s
        num = (num - m) / 26
      }
      return s.toUpperCase()
    }

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-11 12:46:31

    function convert(num) {
    
            var saveLet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
            var singleLet = "";
            var val = 0;
    
            while (num > 0) {
                val = (num-1) % 26
                singleLet = saveLet[val] + singleLet;
                num = Math.floor((num-1) / 26);
            }
            return singleLet;
        }

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-11 12:46:31

    这就是个10进制到26进制的转换而已……
    没记错的话,《微机原理》或者是《C语言基础》都会讲的吧。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-11 12:46:31

    链接描述

    我写了一个DEMO不过,还无法应对像BA这种情况,算法就像上面这样。按照字符数及其值计算。具体楼主的需求可以根据上面的方式演变。

    reply
    0
  • ringa_lee

    ringa_lee2017-04-11 12:46:31

    function convert (num) {
      var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
      var len = str.length;
      var carry = num;
      var ret = [];
      if (!num || num < 0) {
        return;
      }
      do{
        var unit = carry % len;
        if (!unit) {
          carry = carry -1;
          unit = len;
        }
        ret.unshift(str.charAt(unit-1));
        if (carry && carry>0) {
          carry = Math.floor(carry/len)
        }else{
          carry = 0
        }
      }
      while (carry);
      return ret.join('');
    }

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-11 12:46:31

    // 字符串转数字 利用ascill 数字转字符也可以用这种吧

    function convert(str) {
        var count = 0;
        var strArray = str.toUpperCase().split('');
        strArray.forEach(function(item, index) {
            count += item.charCodeAt() - 64 + index*25;
        })
        return count
     }

    reply
    0
  • 高洛峰

    高洛峰2017-04-11 12:46:31

    function convert(n) {
        var s = '';
        while (n>0) {
            var m = n % 26;
            if (m==0) m = 26;
            s = String.fromCharCode(m + 64) + s;
            n = (n - m) / 26;
        }
        return s;
    }

    reply
    0
  • 迷茫

    迷茫2017-04-11 12:46:31

    应该是这道题吧 https://leetcode.com/problems...,AC 代码 https://github.com/hanzichi/l...

    reply
    0
  • Cancelreply