正整数转换成Excel表示法

题目:

        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;
}
运行结果:


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值