Day8 题解 T1 一千万零一只斑点狗 题目大意

给定一个正整数 N(1 ≤ N ≤ 1e15),将其转换为一个由小写字母组成的字符串。转换规则类似于 Excel 表格的列名:

1 → "a", 2 → "b", ..., 26 → "z" 27 → "aa", 28 → "ab", ..., 52 → "az" 53 → "ba", ..., 702 → "zz" 703 → "aaa", ... 解题思路

这个问题类似于将十进制数转换为26进制数,但有一个关键区别:通常的26进制数是0-25表示a-z,而这里是1-26表示a-z。因此,我们需要对N进行一些调整:

每次处理当前位时,先将N减1,这样0-25对应a-z。 不断将N除以26,直到N为0。每次的余数就是当前位的字母。 由于我们从低位到高位计算,最后需要将结果字符串反转。

题解:

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    freopen("dog.in", "r", stdin);
    freopen("dog.out", "w", stdout);
    long long n;
    cin >> n;
    string ans;
    while (n > 0) {
        n--; // 调整到0-25的范围
        char c = 'a' + (n % 26);
        ans += c;
        n /= 26;
    }
    reverse(ans.begin(), ans.end());
    cout << ans << endl;
    return 0;
}