[Go] 엑셀 컬럼명 만들기.
http://www.gonuts.kr/ 블로그에 아래와 같은 문제가 있어서 코드를 본다.
/*엑셀과 같은 스프레드시트에서, 컬럼 이름은 첫번째가 A, 두번째가 B... 같은 식인데,26번째인 Z 다음부터는 AA, AB,.. 처럼 됩니다.숫자를 입력받으면 그 순서에 대응되는 엑셀 컬럼을 출력하는 프로그램을 작성하세요.*/
계산하는 부분만 변경해서 출력해본다.
0부터 시작하도록 변경한다.
package main
import (
"fmt"
"os"
//"strconv"
)
func main() {
// if len(os.Args) != 2 {
// fmt.Println("Usage: ", os.Args[0], "number")
// os.Exit(1)
// }
//
// input := os.Args[1]
// input_number, _ := strconv.Atoi(input)
// if input_number < 1 {
// fmt.Println("Error: ", input)
// os.Exit(1)
// }
var input_number = 702
var digit = 26
column_value := make([]int, 0)
for {
res := input_number / digit
mod := input_number % digit
if len(column_value) == 0 {
column_value = append(column_value, mod)
} else {
if mod == 0 {
mod = digit -1
res = res - 1
} else {
mod = mod -1
}
column_value = append(column_value, mod)
}
if res == 0 {break}
input_number = res
}
var column_name string
for _, v := range column_value {
column_name += fmt.Sprintf("%c", v + 65)
}
fmt.Println(Reverse(column_name))
os.Exit(0)
}
//http://stackoverflow.com/questions/1752414/how-to-reverse-a-string-in-go
func Reverse(s string) string {
runes := []rune(s)
for i, j := 0, len(runes) - 1; i < j; i, j = i + 1, j - 1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
25 를 입력하면 Z 가 나온다.
26 을 입력하면 AA 가 나온다.
#계산 순서
1. 입력된 값을 26으로 나눈다.
27 입력, 몫1, 나머지1
2. 몫을 26으로 나눈다.
몫0, 나머지 1
나머지 1에서 1을 뺀다. 1-1 = 0
나머지가 0인 경우에는, 25로 변환하고, 몫에서 1을 뺀다.
각 숫자를 알파벳으로 변환한다.
0 -> A
1 -> B
....
[EoD]
'Programming > Go' 카테고리의 다른 글
| [Go] 다른 파일의 함수 호출하기. (0) | 2013.11.08 |
|---|---|
| [Go] 파일 읽기 (0) | 2013.11.07 |
| [Go] Hello World 출력하기 (0) | 2013.11.07 |
| [Go] Read Input (0) | 2013.11.05 |
| [Go] 참고사이트 (0) | 2013.11.05 |
ExcelColName.xlsx
ExcelColName.go
ExcelColName.exe
댓글