题目
Given a positive integer, return its corresponding column title as appear in an Excel sheet.
For example:
1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB
...
Example 1:
Input: 1
Output: "A"
Example 2:
Input: 28
Output: "AB"
Example 3:
Input: 701
Output: "ZY"
解析
本题最终考察的是进制的转换,1-26为一组数据,但是是从1开始,应该从0开始才对,因为对于10进制来说,0-9是一组数。因此需要注意的是,在进行做取余和除法运算的时候,需要先将n-1,然后再进行运算,这样比较简单。
代码(C语言)
char *convertToTitle(int n) {
char* str1 = (char*)malloc(sizeof(char) * 255);
char* str2 = (char*)malloc(sizeof(char) * 255);
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wsizeof-array-argument"
#pragma clang diagnostic ignored "-Wsizeof-pointer-memaccess"
memset(str1, '\0', sizeof(str1));
memset(str2, '\0', sizeof(str2));
#pragma clang diagnostic pop
int count = 0;
while (n > 0) {
n = n - 1; // 将n-1
*(str1 + count) = (n % 26) + 'A'; // n对26取余的结果再加上'A'便把那个1抵消了
++count;
n = n / 26; // 根据商数进行下一次的循环
}
for (int i = 0; i < strlen(str1); ++i) {
*(str2 + i) = *(str1 + strlen(str1) - i - 1);
}
free(str1);
return str2;
}
网友评论