蓝桥杯2019年年号字串

【问题描述】
  小明用字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于 27 以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对 应 28,AZ 对应 52,LQ 对应 329。
  请问 2019 对应的字符串是什么?
 
【答案提交】
  这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一 个大写英文字符串,在提交答案时只填写这个字符串,注意全部大写,填写多 余的内容将无法得分。

思路:这是进制转换题,但又与以往的进制转换题不一样,它是从1开始数的,而不是0,这就需要灵活转换下。

解法一:暴力破解
思路:不会用到0,但要知道是几位数

#include
//暴力破解,因此是从1,2,3,,,26的,故没有0,直接从1开始循环,因为是26进制,故十进制转换为26进制一样,按位相乘法。缺点就是要知道是几位数,
int main(){
	int i,j,k;
	for(i=1;i<=26;i++)
	  for(j=1;j<=26;j++)
	    for(k=1;k<=26;k++){
	    	if(i*26*26+j*26+k==2000)
	    	printf("%d %d %d",i,j,k);//自己装换下,1表示A,26表示Z等等
		}
		return 0;
} 

解法二:求余,余数是0时,该数为z,且前面的数要减1

#include  
int main(){
	char a[27];
	int i,j,k;
	for(int i=0;i<26;i++){   
		a[i+1]='A'+i;
	}
	int n=2000;
	int b[100];
	i=0; 
	while(n!=0){
		if(n%26==0){                        //由于是从1开始计数,是26进制,故0是z,且n要减1,类似1,2,3,4,5,6,7,8,9,10,是十进制,而10是除以10得到的0,和向前拿的1 
			b[i]='z';
			i++;
		    n=(n-1)/26;                    //因为是z,故要减1 ,重点
		} 
		else{
				b[i]=a[n%26];   
				i++;  
				n/=26; 
	}
	} 
	for(i--;i>=0;i--){
		printf("%c",b[i]);
       }
	return 0;
}

你可能感兴趣的:(蓝桥杯)