- 陈俊霖 的博客
七月Day-8总结
- @ 2025-7-23 21:20:17
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;
}