Excel地址
一、题目内容
题目描述
Excel单元格的地址表示很有趣,它使用字母来表示列号。比如:
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,
....
当然Excel的最大列号是有限度的,所以转换起来不难。如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?本题目即是要求对输入的数字, 输出其对应的Excel地址表示方式。
输入
输入数字
输出
对应的Excel地址
样例输入
26
样例输出
Z
二、思路分析
题目有点类似进制转换问题,只不过是相当于最终转换的26进制用字母来表示。先用字符串保存A~Z,注意str[0] = "Z",每次取%计算都是先得到低位的结果,所以用栈来保存就很容易实现了。注意一下,26的倍数会出现一些问题,例如对于数字如果是26,则应该输出Z,所以我们就要进行一下判断了,使while提前跳出循环,否则26/26=1,又进入了循环。
三、代码实现
#include <bits/stdc++.h>
using namespace std;
stack <char> ans;
string str = "ZABCDEFGHIJKLMNOPQRSTUVWXY";
int main() {
int n;
cin >> n;
while (n) {
ans.push(str[n % 26]); //转换为字母 入栈
if (n % 26 == 0) {
n--;
}
n /= 26;
}
while (!ans.empty()) {
cout << ans.top(); //取栈顶元素
ans.pop(); //出栈
}
return 0;
}
加油哦! 如有错误和需要改进完善之处,欢迎大家纠正指教。