本题目与前面的把序列字母转换为数字的题目正好相反,是把数字转化为对应的序列字母。首先是步骤:根据逐步求商先确定字母有多少个,再动态申请空间避免内存浪费*(s+size-i)就对应于s[size-i],从后往前逐步的给每个字母赋值即可。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *convertToTitle(int n) {
char *s;
int fac=26,size=0,num=n,i=1;
while(num>0) {
num=(num - 1) / 26;
size++;
}
s=(char*)malloc(size*sizeof(char));
while(n>0){
n--;
*(s+size-i)=(char)(n%fac+'A')+*s;
n/=fac;
i++;
}
return s;
}
int main()
{
int x;
while(scanf("%d",&x)!=EOF)
{
printf("%s\n",convertToTitle(x));
}
return 0;
}