2019蓝桥杯(c++)选择题-2

【问题描述】小明用字母 A 对应数字 1, B 对应 2,以此类推,用 Z 对应 26。对于 27以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27, AB 对应 28, AZ 对应 52, LQ 对应 329。请问 2019 对应的字符串是什么?

思考过程:
woc,刚开始把A-1,B-2,……,Z-26这个映射前移
A-0,B-1,……,Z-25
题目的2019,按照新映射应该是2018
然后用了普通n进制和十进制的转化

stack<int> S;
while(num)
{
	S.push(num % 26);
	num /= 26;
}

然后我发现,上面的代码在进位的时候是进1。
而题目的要求应该是进0。
没办法,只能想一个进0的思路。
因为映射前移比较麻烦,所以我就不想这么做了。
然后我就在想AA-27,是怎么进位的。

没想出来,气的老子直接暴力枚举

for(int i = 0; i <= 26; i++)
        for(int j = 0; j <= 26; j++)
            for (int k = 0; k <= 26; k++)
            {
                if (i * 26 * 26 + j * 26 + k == num)
                {
                    cout << (char)('A' + i - 1) << (char)('A' + j - 1) << (char)('A' + k - 1) << endl;
                    break;
                }
            }

之后我又想了想其实不用这么枚举
2019 用三个字母就行
所以

int arr[5];
arr[i] = num / (26*26);
num % (26 * 26);
i++;
arr[i] = num / 26;
num % 26;
i++;
arr[i] = num;

这里给一份其他人的代码,在num == 26时会有错误,我不知道怎么去修改
具体的思路:应该和上面的代码(没有循环的那个)一样的思路
把这个数分解,每一位用相应的 字母表示就行
比如 2019 = 2 * (26 * 26) + 25 * 26 + 17;

int num, i = 0;
    while(cin >> num)
    {
        i = 0;
        char res[30];
        while (num)
        {
            res[i++] = num % 26 + 'A' - 1;
            num /= 26;
        }
        for (i = i - 1; i >= 0; i--)
            cout << res[i];
            cout << endl;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值