狗的名字 ATCOER-ABC-171-C One Quadrillion and One Dalmatians

狗的名字 ATCOER-ABC-171-C

One Quadrillion and One Dalmatians

题目链接

我们可以将名字看成26进制的数,就可以转化为将一个10进制转26进制的数的问题。但我们现在有个问题:

1表示\(a\)

2表示\(b\)

3表示\(c\)

……

25表示\(y\)

\(z\)怎么表示?

当然是用0了,但任意进制的数都不可以有前导0,所以26的输出就会变成\(az\),所以我们在转进制时有个小技巧——每得到一位就把\(n\)--,如果是26的倍数的话,减去1就不会向前进1;如果不是26的倍数减去1以后不会影响结果(此处为整除结果)。

如:

  • 26%26=0
  • 将26-1得25
  • 25/26=0
  • 因为已经等于0,所以不会计算下一位
  • 答案就为\(z\)

具体可以调试+看代码理解

CODE

#include<bits/stdc++.h>
using namespace std;

#define ll long long

ll a[5000005];

ll n,cnt;

int main()
{
    scanf("%lld",&n);
    while(n>0)
    {
        a[++cnt]=n%26;
        if(a[cnt]==0) a[cnt]=26;
        n--;
        n/=26;
    }
    for(int i=cnt;i>=1;i--)
    {
        cout<<(char)(a[i]+'a'-1);
    }
}
posted @ 2022-05-13 21:45  彬彬冰激凌  阅读(73)  评论(0)    收藏  举报