题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明用字母 A 对应数字 11,B 对应 2,以此类推,用 Z 对应 26。对于 27 以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对应 28,AZ 对应 52,LQ 对应 329。
请问2019 对应的字符串是什么?
运行限制
最大运行时间:1s
最大运行内存: 128M
所需变量
int sum[5];//代表一位到底是几
int control;//代表一共有多少位才可以代表这个数
int c;//为了将这个填空题做成程序题,令的一个变量,在该填空题中,赋初值为2019
我们首先要确定如果每一位上是5,那么应该就是E(大写),如果是3那么就是C(大写)
因此我们定义了以下的方法:
int fangfa(int a){
char t = a+64;
printf("%c",t);
}
然后我们要确定一共要多少位才能组成该数所以定义了以下方法:
while(true){
if(pow(26,control)>c){
break;
}
control++;
}
思路:我们首先得到索要判断的数是多少(即c),在该题中我们直接赋值2019,获得这个数字之后,我们在判断需要多少位字母才能表示他,所以就有了上面那个方法的代码,得到多少位表示他后,然后我们一个一个去测试,只有当上面的位比这个还需要表示的数要大的时候,我们就将他变成下一位表示!(这里比较不太好理解,多读几遍,哈哈哈,如果最后实在不是很懂,可以直接私信我!)
该算法本人认为比较优,如果有更好的想法,欢迎q我!
代码如下(编译器是dev,语言是C语言):
#include<stdio.h>
#include<stdbool.h>
#include<math.h>
int fangfa(int a){
char t = a+64;
printf("%c",t);
}
int main()
{
int sum[5] = {0},control = 0;
int c = 2019;
while(true){
if(pow(26,control)>c){
break;
}
control++;
}
control--;
for(int i = control;i>=0;i--){
while(true){
if(c>=pow(26,i)){
c -= pow(26,i);
sum[i]++;
}
else{
break;
}
}
}
for(int i = 0;i<=control;i++){
if(sum[i] == 0){
sum[i] = 26;
sum[i+1] -= 1;
}
}
for(int i = control;i>=0;i--){
fangfa(sum[i]);
}
printf("\n");
return 0;
}