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

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

function convert (num) {
} 

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

阅读 18k
12 个回答

总而言之一句话:

function convert(num){
    return num <= 26 ? 
         String.fromCharCode(num + 64) : convert(~~((num - 1) / 26)) + convert(num % 26 || 26);
}
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上面的。。

这样可以吗

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()
}
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;
    }
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('');
}
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;
}

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

链接描述

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

// 字符串转数字 利用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
 }
function transformChars(s) {
    var chars = ["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"
    ];

    function getCharIndex(string) {
        var strings = string.trim().split("");
        var indexs = [];
        var temp = [];
        var result = 0;
        for (var i = 0; i < strings.length; i++) {
            indexs.push(chars.indexOf(strings[i]) + 1);
        }
        for (var i = 0; i < indexs.length; i++) {
            if (i === indexs.length - 1) {
                temp.push(indexs[i])
            } else {
                temp.push(indexs[i] * chars.length + (i === 0 ? 0 : Math.pow(chars.length, i+1) - 26 )) 
            }
        }
        for (var i = 0; i < temp.length; i++) {
            result += temp[i]
        }
        return result;
    }
    return getCharIndex(s)
}

transformChars("BC")
新手上路,请多包涵

return parseInt(num,26)

26转10进制的啊,最高的那个回答是10转26

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题