蓝桥杯:年号字串 不能用进制转换
【问题描述】
小明用字母 A 对应数字 1, B 对应 2,以此类推,用 Z 对应 26。对于 27以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27, AB 对应 28, AZ 对应 52, LQ 对应 329。
请问 2019 对应的字符串是什么?
乍一看好像是考察进制转换,但是后来写了一下程序会发现:
A=1, B=2, … Z=26 是的,没有 0 ,那么不能够用普通进制转换的思路去解了
思路
通过简单的几何学 数学知识判断用字母表示不会超过3个字母,因为262 =676,676 * 3 > 2019
那么直接暴力解就好了,比如当前是判断最高位等于多少,那么就是找到一个最大的数字 x 使得 262 * x 小于等于 2019
然后 将数字变换: 2019 -= x * 262 即可
#include <iostream>
using namespace std;
int a[4];
int len = 0;
int main()
{
int x = 2019;
for(int i=3; i>=1; i--)
{
int radix = 1;
for(int j=0; j<i-1; j++)
{
radix *= 26;
}
for(int j=26; j>=1; j--)
{
if(radix*j <= x)
{
a[len++] = j;
x -= (radix * j);
break;
}
}
}
for(int i=0; i<len; i++)
{
cout<<(char)('A'-1+a[i])<<" ";
}
return 0;
}