题目
给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1 -> A
2 -> B
3 -> C
…
26 -> Z
27 -> AA
28 -> AB
…
示例
- 示例 1:
输入: 1
输出: “A” - 示例 2:
输入: 28
输出: “AB” - 示例 3:
输入: 701
输出: “ZY”
C++代码
考虑特殊情况52,78…
28/26=1,28%26=2,28对应的是AB;
701/26=26,701%26=25,26/26=1,26%26=0,701对应的是ZY
52/26=2,52%26=0,52对应的是AZ
可以发现,出现能整除的情况时,对应的字母为商-1。
class Solution {
public:
string convertToTitle(int n)
{
string name; //表列名称
char temp;
int q = n; //商
int r; //余数
if (q<27) //1-26
{
name = (q % 27) + '@';
return name;
}
while (q>26)
{
r = q % 26;
q = q / 26;
if (r == 0) //出现能整除的情况(感觉有点类似于加法中的进位),退位
{
temp = 'Z';
q -= 1;
}
else temp = r + '@';
name = temp + name;
}
temp = q + '@';
name = temp + name;
return name;
}
};
可以看作是十进制转为26进制,将余数转换为对应的字母(1->A)
class Solution {
public:
string convertToTitle(int n)
{
string name;
char temp;
while(n>0)
{
temp=(n-1)%26+'A';
name=temp+name;
n=(n-1)%26;
}
return name;
}
};