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
分析
找出excel列标题变化的规律。类似于26进制,但有些不同。需要ABCD=A×26³+B×26²+C×26¹+D=1×26³+2×26²+3×26¹+4来对每一位进行处理。
char* convertToTitle(int n) {
char*ans=(char*)malloc(sizeof(char)*1000);
int length=0;
int num=n;
while(num>0)
{
if(num%26==0)
{
ans[length]='Z';
length++;
}
else
{
ans[length]=num%26+'A'-1;
length++;
}
num=n;
int mi=1;
for(int i=0;i<length;i++)
{
num=num-(ans[i]-'A'+1)*mi;
mi=mi*26;
}
for(int i=0;i<length;i++)
{
num=num/26;
}
//printf("%d %c\n",num,ans[length-1]);
}
ans[length]='\0';
for(int i=0;i<length/2;i++)
{
char temp=ans[i];
ans[i]=ans[length-i-1];
ans[length-i-1]=temp;
}
length++;
return ans;
}
还有一种方法将 1-> A, 26 -> Z, 转化为0 -> A, 25 -> Z,这样就能使用之前进制转化的方法来计算。
string convertToTitle(int n) {
string ans;
while (n) {
ans = char ((n - 1) % 26 + 'A') + ans;
n = (n - 1) / 26;
}
return ans;
}