一、问题描述
二、算法简析
本题要求我们将十进制转换为二十六进制。与正常的二十六进制(数由
0
,
1
,
.
.
.
,
25
0, 1, ..., 25
0,1,...,25 组成)不同,本题的二十六进制没有
0
0
0。由题意,
(
1
)
10
=
A
,
(
2
)
10
=
B
,
.
.
.
,
(
25
)
10
=
Y
(1)_{10}=\text{A},~(2)_{10}=\text{B},~...,~(25)_{10}=\text{Y}
(1)10=A, (2)10=B, ..., (25)10=Y。
在正常的二十六进制中,
(
26
)
10
=
(
10
)
26
(26)_{10}=(10)_{26}
(26)10=(10)26;本题,
(
26
)
10
=
(
Z
)
26
(26)_{10}=(\text{Z})_{26}
(26)10=(Z)26。为了使本题的转换与正常情况一样,令
(
0
)
10
=
Z
(0)_{10}=\text{Z}
(0)10=Z(实际并非如此,只是为了符合转换规则)。按转换规则,
26
mod
26
=
0
26~\text{mod}~26=0
26 mod 26=0,即与
Z
\text{Z}
Z 对应;接着,
26
/
26
=
1
26~/~26=1
26 / 26=1,在这种情况下(余数为0),商要 -1
,此处即为0。
三、代码
#include <bits/stdc++.h>
using namespace std;
char A[30];
int main()
{
int n;
cin >> n;
A[0] = 'Z';
for (int i = 1; i < 26; i++)
A[i] = 'A' + i - 1;
string ans;
while (n > 0)
{
int rem = n % 26;
ans.push_back(A[rem]);
n /= 26;
if (rem == 0)
n--;
}
reverse(ans.begin(), ans.end());
cout << ans << endl;
return 0;
}
完