小明用字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于 27 以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对 应 28,AZ 对应 52,LQ 对应 329。 请问 2019 对应的字符串是什么?
遇到类似的题目好多次了,总结一下
想一下,十进制数如何得到每一位上的数字?
首先把n对10取余,得到每一位上的数字,再除以10…直到n变成0,存到数组中逆序输出即可
while (n > 0) {
s[idx++] = n % 10;
n /= 10;;
}
for (int i = idx - 1; i >= 0; i--)
cout << s[i];
cout << endl;
我们类似的,把n对26取余,得到每一位上的数字,再除以26…
但是我们发现每一位上的数字是1——26,并没有表示0的字符,怎么办呢?
将n减1后再进行操作
#include <bits/stdc++.h>
using namespace std;
char s[105];
int main(void)
{
int n, idx = 0;
cin >> n;
while (n > 0) {
s[idx++] = 'a' + (n - 1) % 26;
n = (n - 1) / 26;
}
for (int i = idx - 1; i >= 0; i--) {
cout << s[i];
}
cout << endl;
return 0;
}
上面的代码得到的是逆序的,还要存到一个数组里,再逆序输出才行,比较麻烦
使用dfs改进一下,使用递归的写法,一直找到最后的个位,再依次输出
#include <bits/stdc++.h>
using namespace std;
void dfs(int n)
{
if (n > 26) dfs((n - 1) / 26);
putchar('a' + (n - 1) % 26);
}
int main(void)
{
int n;
cin >> n;
dfs(n);
cout << endl;
return 0;
}