我有一个返回
的函数GetLetters
a
当我提出1
b
当我提出2
z
当我提出26
aa
当我提出27
ab
当我提出28
基本上你已经明白了,这是我的解决方案,但当我提供26以上的任何输入值时它无限循环,是否有人知道它有什么问题?
function GetLetter($amt){
if($amt<=26){
return strtolower(chr(64+$amt));
}
$letters=array();
while(true){
$quotient=$amt%26;
array_unshift($letters,GetLetter($quotient===0?26:$quotient));
$amt=floor(($amt-1)/26);
if($amt===0){
break;
}
}
return implode("",$letters);
}
答案 0 :(得分:4)
答案 1 :(得分:3)
我认为floor
返回float,你使用===
而不是==
来与integer(0)进行比较,所以float(0)=== int(0)总是false
答案 2 :(得分:2)
作为另一种方法(注意它是O(n)):
function getLetters($n) {
for ($chr = 'a'; --$n;) ++$chr;
return $chr;
}
(如果你在PHP中增加一个字符,它将首先从a..z
开始,然后aa..zz
,依此类推,就像你想要的那样。)
答案 3 :(得分:1)
每当您使用while
语句之类的重复语句时,不应使用float
类型来确定重复的结束。浮点数永远不会非常精确,因此它们不是条件语句的理想选择。