蓝桥杯:年号字串 不能用进制转换

蓝桥杯:年号字串 不能用进制转换

【问题描述】

小明用字母 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;
}

在这里插入图片描述

附:错误使用进制转换的代码

在这里插入图片描述

发布了44 篇原创文章 · 获赞 1 · 访问量 566

猜你喜欢

转载自blog.csdn.net/weixin_44176696/article/details/104080440