为什么quot需要反复减1?

Why does quot need to be repeatedly subtracted by 1?

这个问题是基于这个话题 Programming Riddle: How might you translate an Excel column name to a number?

这是该问题的代码,用于将列号转换为 excel 列名

public String getColName (int colNum) {

   String res = "";
   int quot = colNum;
   int rem;        
    /*1. Subtract one from number.
    *2. Save the mod 26 value.
   *3. Divide the number by 26, save result.
   *4. Convert the remainder to a letter.
   *5. Repeat until the number is zero.
   *6. Return that bitch...
   */
    while(quot > 0)
    {
        quot = quot - 1;
        rem = quot % 26;
        quot = quot / 26;

        //cast to a char and add to the beginning of the string
        //add 97 to convert to the correct ascii number
        res = (char)(rem+97) + res;            
    }   
    return res;
}

我彻底测试了这段代码并且它可以工作,但我有一个问题,需要重复这一行才能工作

            quot = quot - 1;

根据我的理解,quot 需要将 col 编号映射到远离 'a' 的距离。这意味着 1 应该映射到距 'a' 的 0 距离,距 'a' 的 2 到 1 的距离,依此类推。但是你不需要减去这个一次来解释这个吗?不在循环中 我的意思是最终,

            quot = quot / 26;

将停止循环。

Excel 列不是正常的数字系统。它不仅仅是基数 26。第一个两位数列是 "AA"。在任何正常的数字系统中,前两位数由两个不同的数字组成。基本上,在 excel 列编号中,没有 "zero" 数字。

为了解决这个差异,每次迭代都会减去 1。