为什么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。
这个问题是基于这个话题 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。