题目:
Excel表中,横轴是用A,B,C...,Z,AA,AB,AC,...ZZ,AAA,AAB......这样的序列来表示的。请实现一个函数string f(int x),把正整数转换成Excel表示法,例如:f(1)="A",f(2)="B",f(27)="AA"。
分析:
我的第一感觉是A,B,C...,Z,AA,AB,AC,...ZZ,AAA,AAB......可以转换成“进制数”表示形式,由于一共26个英文字母,可以转换成26进制表示形式。转换成26进制形式后26进制数1对应A、2对应B....25对应Y,这样Z只能对应26进制数10。而十进制数27转换成26进制数为11即可对应成AA,十进制数52转换成26进制数为20对应为AZ。所有我们需要对能被26整除的正整数进行特殊处理。
实现:
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
string f(int x)
{
float n=log(x+1)/log(26);
int len=(int)ceil(n);
char *p=new char[len+1];
string str;
char temp;
char *q,*r;
r=q=p;
while(x)
{
if(x%26==0)
{
*r='Z';
x=x/26-1;
}
else
{
*r=char((x%26-1)+'A');
x=x/26;
}
r++;
}
*r='\0';
r=r-1;
for(int j=0;j<len/2;j++)
{
temp=*q;
*q=*r;
*r=temp;
r--;
q++;
}
str=p;
delete [] p;
return str;
}
int main(void)
{
int num;
while(1)
{
cout << "输入正整数:";
cin >> num ;
cout <<f(num)<<endl;
}
return 0;
}
运行结果: