一、问题描述
Excel地址
二、算法简析
本题要求我们将十进制转换为二十六进制。与正常的二十六进制(数由 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;
}
完