Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何输出这样的列表:AA、AB、AC,一直到ZZY、ZZZ、ZZZ等_Php_Algorithm_Logic - Fatal编程技术网

PHP:如何输出这样的列表:AA、AB、AC,一直到ZZY、ZZZ、ZZZ等

PHP:如何输出这样的列表:AA、AB、AC,一直到ZZY、ZZZ、ZZZ等,php,algorithm,logic,Php,Algorithm,Logic,我正试图编写一个函数,将一个整数转换成这样的字符串,但我无法理解逻辑…:( 有人能帮忙吗?我真的很烦,我不知道怎么写这个…:(长长的列表: /* *将整数转换为大写字母字符串(a-Z、AA-ZZ、AAA-ZZZ等) */ 函数num2alpha($n) { 对于($r=”“;$n>=0;$n=intval($n/26)-1) $r=chr($n%26+0x41)。$r; 返回$r; } /* *将大写字母字符串转换为整数。 */ 函数alpha2num($a) { $l=斯特伦($a); $n=

我正试图编写一个函数,将一个整数转换成这样的字符串,但我无法理解逻辑…:(

有人能帮忙吗?我真的很烦,我不知道怎么写这个…:(

长长的列表:

/*
*将整数转换为大写字母字符串(a-Z、AA-ZZ、AAA-ZZZ等)
*/
函数num2alpha($n)
{
对于($r=”“;$n>=0;$n=intval($n/26)-1)
$r=chr($n%26+0x41)。$r;
返回$r;
}
/*
*将大写字母字符串转换为整数。
*/
函数alpha2num($a)
{
$l=斯特伦($a);
$n=0;
对于($i=0;$i<$l;$i++)
$n=$n*26+ord($a[$i])-0x40;
返回$n-1;
}
好吧,你基本上是在从基数10转换到基数26。基数10有数字0-9,而基数26可以用“数字”A-Z表示。从基数10转换很容易-例如,请参见: 编辑:实际上,base-26无法解释写入0(0=00=000)的多种等效方法。

您必须使用将数字转换为26 base:

base_convert(35, 10, 26);

这将以数字形式显示
1-p
中的各个组件,因此35变为
19
(1*26+9)然后你必须将各个组件映射到你想要的集合,所以1=>a,9=>i,a=>j等等,
19
变成
ai
我将添加这个答案来总结关于滥用base-26的评论

当遇到这个问题时,一个常见的第一反应是认为“有26个字母,所以这一定是base-26!我所需要做的就是将每个字母映射到对应的数字”

但这不是base-26。很容易看出原因:没有零

在base-26中,数字二十六是第一个两位数的数字,写为“10”。在这个计数系统中,二十六有一个单位数“Z”,前两位数是二十七

但是如果我们把A=0,…,Z=25怎么办?这样我们就有了一个0,前两位数变成了26。到目前为止还不错。我们现在怎么写26呢?那是“AA”。但是…A=0不是吗?Ooops!A=AA=AAA=“0”=“00”=“000”。

void convert(int number)
{
字符串str=“”;
while(数字)
{
char ch;
ch=(数字-1)%26+65;
str=ch+str;
编号=(编号1)/26;
}

不可能。说“数字”A相当于“数字”1,B是2,依此类推。所以我们有1,2,3,4,…,Z,11,12,13,…,1Z,21。不好。好吧,让我们试试A=0,B=1,等等。我们有0,1,2,3,4,…,Z,Z,00,01,02,…,0Z,10,。不,根本不是base-26。@Martinho Fernandes:我没有说base-36,也没有说0-9+A-Z;你似乎在用那个。请告诉我,从A到Z的英文字母表中有多少个字母?上一次提姆我查了一下,一共有26个。A=1,B=2,C=3,…,X=24,Y=25,Z=26,AA=27(26^1*A+26^0*A),AB=28(26^1*A+26^0*A),AC=29,AD=30,等等。你可能被base-16搞糊涂了,它使用0-9+A-F,这是一个稍微不同的情况。你没有领会我的观点:1,2,3,4,…,11,12,13。你刚刚错过了数字“10”(又名26)!看,在26进制中,数字26有两位数字,就像2进制中的2和10进制中的10一样。@Martinho Fernandes:看起来我确实错过了它。如果A=0,那么A=AA=AAA=AAAA=AAAA=0。你是对的,谢谢你纠正我。+1。虽然你需要从num2alpha中$n的初始值中减去1,而不是在alp中减去1ha2num,为了匹配OP的规范1=A.good call——代码直接取自php.net站点,作为概念的良好参考,为什么它不适用于这样的大数字:num2alpha(20160504123435)?问题是,26=>1*26+0=>10以26为基数。哎哟,你如何映射0?不,这种Excel式的计数不是以26为基数。@Martinho Fernandes有趣的是,你是对的,根本没有基数。我想知道OP是如何解释0的……我只是想弄明白。如果A=0,26不只是BA,而不是AA。@Paystey是的,如果这是以26为基数。但在这个方案中,25(Z)后面的数字是AA。是的,是的,只是想让我的脑袋在26的底部完全由字母组成。它是有效的。但这不是这个。谢谢。
/*
 * Convert an integer to a string of uppercase letters (A-Z, AA-ZZ, AAA-ZZZ, etc.)
 */
function num2alpha($n)
{
    for($r = ""; $n >= 0; $n = intval($n / 26) - 1)
        $r = chr($n%26 + 0x41) . $r;
    return $r;
}

/*
 * Convert a string of uppercase letters to an integer.
 */
function alpha2num($a)
{
    $l = strlen($a);
    $n = 0;
    for($i = 0; $i < $l; $i++)
        $n = $n*26 + ord($a[$i]) - 0x40;
    return $n-1;
}
base_convert(35, 10, 26);
void convert(int number)
{

        string str = "";

    while(number)
    {
        char ch;
        ch = (number - 1) % 26 + 65;    
        str = ch + str;
        number = (number-1) / 26;
    }

    cout << str << endl;
}