问题描述
Excel单元格的地址表示很有趣,它使用字母来表示列号。
比如,
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,
....
当然Excel的最大列号是有限度的,所以转换起来不难。
如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?
本题目即是要求对输入的数字, 输出其对应的Excel地址表示方式。
比如,
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,
....
当然Excel的最大列号是有限度的,所以转换起来不难。
如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?
本题目即是要求对输入的数字, 输出其对应的Excel地址表示方式。
样例输入
26
样例输出
Z
样例输入
2054
样例输出
BZZ
数据规模和约定
我们约定,输入的整数范围[1,2147483647]
题目分析
这个题有点像进制转换,但是又有不同,不同之处在于,他没有‘0’。
举个例子,1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 21 22 23 24……
上面的例子,他没有含有0的任何数字。
第一步:我们先把9变成九进制 10
第二步:如果某位数字为0,那么则向前借位,10就变成了09
那么答案就是9
对应到我们这个题上,无非就是九进制变成了二十六进制。
对应到我们这个题上,无非就是九进制变成了二十六进制。
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <vector> #include <stdlib.h> #include <cstdlib> #include <string.h> #include <string> #include <cmath> #include <map> using namespace std; int n; char s[1000]; int main() { cin >> n; _itoa(n, s, 26);//转换进制 for (int i = 0; s[i] != '