2015-01-23 4 views
1

이 질문이 스레드 여기 Programming Riddle: How might you translate an Excel column name to a number?quot를 1 씩 반복해서 뺄 필요가있는 이유는 무엇입니까?

을 기반으로하는 엑셀 열 이름 난 철저하게이 코드를 테스트

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 번호를 매핑하는 데 필요합니다. 즉, 1은 'a'에서 0 거리, 'a'에서 2 ~ 1 거리만큼 떨어져 있어야합니다. 그러나 이것을 설명하기 위해 이것을 한 번 뺄 필요가 없습니까? 루프에 없습니다 결국,

  quot = quot/26; 

루프를 중지합니다.

+0

아마도 원래 값은 0..25가 아닌 1..26의 값을 결합하여 형성되었을 것입니다. –

+0

하지만이 작업을 수행하기 때문에 0 ... 25입니다. rem + 97, 'a'에서 멀리 떨어지십시오. – committedandroider

답변

4

Excel 열은 일반적인 숫자 시스템이 아닙니다. 단지 기본 26이 아닙니다. 처음 두 자리 열은 "AA"입니다. 모든 일반 시스템에서 첫 번째 두 자리 숫자는 두 개의 다른 숫자로 구성됩니다. 기본적으로 Excel 열 번호 매기기에는 "0"숫자가 없습니다.

이 차이를 고려하여 각 반복에서 1을 뺍니다.

+0

제로 자릿수에 동의합니다. 26 점을 통과하면 25 점을 빼고 1 점을 빼면 'a'에서 멀어집니다. 하지만 그럴 필요는 없을 것입니다. 나에게, 당신은 이것을 한번만 고려해야한다. 이 점을 분명히 할 수 있습니까? – committedandroider

+0

엑셀 컬럼에서 26의 거리를 어떻게 표현합니까? 그것은 "AA"입니다. 첫 번째 "A"는 0이 아닌 거리를 제공하지만 두 번째 "A"는 후행 "0"의 역할을합니다. 마지막을 제외한 모든 장소에서 "A"는 약간의 양의 값을 의미합니다. 하나를 빼면이를 수정합니다. – recursive

+0

거리가 보이는 거리는 26 번베이스에 있습니다. 26/26! = 0을 보면,이 거리는 26 번으로 한 번 더 나타납니다. 그래서 quot = quot/26이 나에게 의미가있는 이유입니다. 다음 패스에서는 의미가 없습니다. quot는 1과 같을 것입니다. 이미 제로 기반의 번호 매기기를 처리 한 경우, 다시 1을 빼야합니까? – committedandroider