Atcoder Beginner Contest 171 C

题意: 给定一个十进制数 n n ,输出它的 26 26 进制数,用 26 26 个小写字母表示
题解: 本来以为直接除即可,但是写几个例子发现由于是取模,所以 0 0 对应 a a 25 25 对应 z z
所以每次取模前都要减去1保证其合法。
26 26 转换成 z z ,那么我们取模的时候最大得到的是 25 25 ,所以 26 26 要事先减去 1 1
27 27 转换成 a a aa ,第一次得到 a a ( 27 1 ) % 26 = 0 (27-1)\%26=0 ,然后 ( 27 1 ) / 26 = 1 (27-1)/26=1 ( 1 1 ) % 26 = 0 (1-1)\%26=0
所以得到了 a a 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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43900869/article/details/106892239