解题思路:
1.传统的进制转换数码都是从0开始的,例如8进制,数码是0 1 2 3 4 5 6 7,n进制的数码就是0 1 2 ... n-1,逢n进位,当前位变为0
2.但是本题的进制转换我们可以看成是特殊的26进制,他的数码不是从0开始的,而是从1 2 ... 26 分别对应的字母是A B .... Z
3.这个26进制,不是逢26进位,逢26不进位,而是逢26+1才进位,而且是高位进1,而当前位也为1
4.因为这个特殊性,我们不能简单的用n%26 得到该位的上的数字(或字母)
5.如果n%26为0时,当前位数字设为26(即字母Z),否则n%26余数即为当前位上的数字(1-25),字母(A-Y)
6.如果n%26为0时,由于不进位,所以,其商也会减少1。即商=n/26-1
注意事项:
参考代码:
#include <bits/stdc++.h> using namespace std; int main(){ long long n; cin>>n; //十进制转26进制 0~25 /* 1-A 1 2-B .. 26-Z (n-1)%26 +'A' */ char ans[10000]; int cnt=0; while(n){ char c; c=n%26+'A'-1;//余数1~26转换对应的字母,其中余数0转为'A'-1 if(n%26==0)c='Z';//余数为0时,修正转换的字母 ans[cnt++]=c;//存储字母 if(n%26==0){//如果余数为0 n/=26;//先进位 n--;//再把进的位减掉 }else{ n=n/26; } } for(int i=cnt-1;i>=0;i--)cout<<ans[i]; return 0; }
0.0分
4 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复