目录
题目
Excel单元格的地址表示很有趣,它使用字母来表示列号。
比如,A表示第1列,B表示第2列,Z表示第26列,
AA表示第27列,AB表示第28列,BA表示第53列,....
当然Excel的最大列号是有限度的,所以转换起来不难。
如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?
本题目即是要求对输入的数字, 输出其对应的Excel地址表示方式。
样例输入
2054
样例输出
BZZ
思路
类比十进制转换成二进制的除二取余法,这里除26取余
最后倒序输出
代码
一开始写了个只能搞两位的,一看样例输入,发现事情并没有那么简单
注意:当余数为0时,意味着要将26取出,原数上要减去26后再对26进行整除
#include<stdio.h>
int main()
{
int num;
scanf("%d",&num);
int n[10];
int i;
for(i=0;i<10;i++){
n[i]=0;
}
char a[10];
for(i=0;i<10;i++){
a[i]='A';
}
i=0;
while(num>26){
n[i]=num%26;
if(n[i]==0){
n[i]=26;
}
a[i]=a[i]+n[i]-1;
num=(num-n[i])/26;
i++;
}
n[i]=num;
a[i]=a[i]+n[i]-1;
for(i;i>=0;i--){
printf("%c",a[i]);
}
return 0;
}