为什么需要重复减去1?

时间:2015-01-23 21:33:17

标签: java excel algorithm modulus

此问题基于此主题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;

根据我的理解,需要使用“将列号映射到远离' a的距离”。这意味着1应该映射到0距离距离' a'距离' a'等等。但是,你不需要减去这一次来解释这一点吗?不是循环 我的意思是最终,

            quot = quot / 26;

将停止循环。

1 个答案:

答案 0 :(得分:4)

Excel列不是普通数字系统。这不仅仅是基数26.第一个两位数的列是“AA”。在任何正常数字系统中,前两位数字由两个不同的数字组成。基本上,在excel列编号中,没有“零”数字。

为了解释这种差异,每次迭代都减去1。