记录一次华为招聘的编程题-excel中的26进制

上次做华为的机试,碰到了与excel有关的题目。

大概复述一遍:excel中的列数使用26个字母组合表示:
a  b  c  ...  y  z  aa  ab  ac  ...  az  ba  bb  bc  ...  by bz  ... ...  zy  zz  aaa  aab  ......
1  2  3 ... 25  26  27  28  29 ... 52 53 54 55  ...  77 78  ... ... 701 702 703 704  ......
试编写一个算法,输入列数,输出对应的字母组合。例如:输入53,输出ba。
当时机试时没有做出来,第二天早上才做出来的,这里记录一下。
JavaScript写的,其他语言类比。
var line = "abcdefghijklmnopqrstuvwxyz";
var list = line.split("");
function baseConversion(N) {
	var jz = [];
	//获得有0的26进制
	while (true) {
		if (parseInt(N/26) === 0) {
			jz.push(N%26);
			break;
		} else{
			jz.push(N%26);
			N = parseInt(N/26);
		}
	}
	
	//转化成无0的26进制
	var jzn = [];
	ifCarry = false;
	for (var i = 0; i < jz.length; i++) {
		if (ifCarry) {
			if (jz[i] > 1) {
				ifCarry = false;
				jzn.push(jz[i] - 1);
			} else{
				if (jz[i] === 0) {
					ifCarry = true;
					jzn.push(25);
				}
				if (jz[i] === 1) {
					if (i === jz.length - 1) {
						
					} else{
						ifCarry = true;
						jzn.push(26);
					}
				}
			}
		} else{
			if (jz[i] === 0) {
				ifCarry = true;
				jzn.push(26);
			} else{
				ifCarry = false;
				jzn.push(jz[i]);
			}
		}
	}
	
	//构建输出
	var out = "";
	for (var i = 0; i < jzn.length; i++) {
		out = list[jzn[i] - 1] + out;
	}
	return out;
}

var outs = [];
for (var i = 1; i < 1000; i++) {
	outs.push(baseConversion(i));
}
console.log(outs.join(" "));


#华为招聘##笔试题目##华为#
全部评论
求问,机考有题库么,在哪里看
点赞 回复
分享
发布于 2020-08-05 17:45
一摸一样的题。。。我也是机试没做出来,完了之后做出来了。。。😥
点赞 回复
分享
发布于 2021-06-08 22:43
联易融
校招火热招聘中
官网直投

相关推荐

点赞 2 评论
分享
牛客网
牛客企业服务