题目描述
Excel单元格的地址表示很有趣,它使用字母来表示列号。
比如,A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,…
当然Excel的最大列号是有限度的,所以转换起来不难。
如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?
本题目既是要求对输入的数字, 输出其对应的Excel地址表示方式。
输入
输入存在多组测试数据,对于每组测试数据输入一行包含一个整数
输入的整数范围[1,2147483647]
输出
对于每组测试数据:输出一行表示答案
样例输入 Copy
26
2054
样例输出 Copy
Z
BZZ
解题思路:
每次将输入的数-1,然后再取模、除26.
代码如下:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;void op(int x) {string a;int k = 0;while (x) {int c = (x - 1) % 26;a[k++] = c + 'A';x = (x - 1) / 26;}for (int i = k - 1; i >= 0; i--) {cout << a[i];}cout << endl;
}int main() {int n;while (cin >> n) {op(n);}return 0;
}