题意: 给定一个十进制数
n
n
n,输出它的
26
26
26进制数,用
26
26
26个小写字母表示
题解: 本来以为直接除即可,但是写几个例子发现由于是取模,所以
0
0
0对应
a
a
a,
25
25
25对应
z
z
z
所以每次取模前都要减去1保证其合法。
如
26
26
26转换成
z
z
z,那么我们取模的时候最大得到的是
25
25
25,所以
26
26
26要事先减去
1
1
1
如
27
27
27转换成
a
a
aa
aa,第一次得到
a
a
a是
(
27
−
1
)
%
26
=
0
(27-1)\%26=0
(27−1)%26=0,然后
(
27
−
1
)
/
26
=
1
(27-1)/26=1
(27−1)/26=1,
(
1
−
1
)
%
26
=
0
(1-1)\%26=0
(1−1)%26=0
所以得到了
a
a
aa
aa。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 110;
char res[N];
int g;
int main()
{
ll n;
scanf("%lld", &n);
while(n) {
n--;
res[g++] = n % 26 + 'a';
n /= 26;
}
for(int i = g - 1; i >= 0; i--) printf("%c", res[i]);
puts("");
return 0;
}