对于26个字母A-Z......

A表示1,B表示2,…,Z表示26,AA表示27,AB表示28,BA表示53…
①:给出字母表达式输出代表的数字
这个比较简单,就当作26进制向十进制的转换就OK了。例如A =1 * 26的0次方
AA=1 * 26的1次方+1 * 26的0次方=27 BA=2 * 26的1次方+1 * 26的0次方=53
②:给出数字输出对应的字符串
其实第一想法是用辗转相除法求十进制数的26进制,然后再让1对应A,2对应B的进行转换。对于27对应的26进制数为11,就转为AA,但对于26对应的26进制数为10,转换过程不能转成Z,因此需要处理一下。代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
	int n;
	while(cin>>n)
	{
		int a[20],j=0;
		while(n>0)
		{
			int t=n%26;
			if(t==0)//如果n是26的倍数,则此处做让t=26的处理
				t=26;
			a[j++]=t;
			n=(n-t)/26;//并且这里本来的n=n/26改为n=(n-t)/26。
			//从而得到我们想要的26对应Z。使得跟Z有关的数字都能输出正确! 
		}
		for(int i=j-1;i>=0;i--)
		{
			char ch=a[i]+'A'-1;
			cout<<ch;
		}
		cout<<endl;
	}
	return 0;
}

若是已经规定了变化范围就是固定的几位 如三位 AAA-ZZZ
二位AA-ZZ,求第几个字符串或者倒数第几个字符串,则不需要上面的那种操作
例如:PTA-倒数第n个字符串

#include<bits/stdc++.h> 
using namespace std;
int main()
{
	int L,N;
	cin>>L>>N;
	int a[7],j=0;//对A~Z进行0~25的标号。相当于就是个10进制到26进制的转换,最终把数字转换为对应的字符 
	long long sum=pow(26,L)-N;//由于从0开始标号,所以倒数第N个就是正数第pow(26,L)-N个。 
	while(L--)
	{
		a[j++]=sum%26;
		sum/=26;
	}
	for(int i=j-1;i>=0;i--)
	{
		char ch=a[i]+'a';
		cout<<ch;
	} 
	cout<<endl;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

henulmh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值