解题思路:
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 人评分
#include<bits/stdc++.h> using namespace std; char ch[26],cnt=1; int main(void){ for(int i='A';i<='Z';i++){ ch[cnt++]=i; } int n,t; cin>>n; /*for(int i=0;i<cnt;i++){ cout<<ch[i]<<" "; }*/ int flag=1,tot; while(flag){ tot=n; if(n<=26){ if(n%26==0)int ss = n/26; cout<<ch[n]; break; } else if(n>26&&n%26==0){ int k = (n/26); cout<<ch[k]; k-=1; int tmp =n-(k*26); cout<<ch[tmp];if(tot/=26){ flag =1; } flag = 0; } else{ t = n/26; cout<<ch[t]; cout<<ch[n%26]; if(tot/=26){ flag =1; } flag = 0; } } return 0; }
【计算球体积】 (C语言代码)浏览:1072 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:736 |
点我有惊喜!你懂得!浏览:2115 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:668 |
C语言程序设计教程(第三版)课后习题8.1 (Java代码)浏览:828 |
C二级辅导-公约公倍 (C语言代码)浏览:1550 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:575 |
蓝桥杯历届试题-九宫重排 (C++代码)浏览:2813 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:591 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:863 |