7-8 mmh学长的Excel表格 (20分)

这个题常见的26进制的题,但是存在一个小坑,我们来研究一下

1.将字符串转化为数字的时候比较简单,就是成26的0次1次..n次幂的问题

2.将数字转化为字符串的时候是有坑的,对于1*26^2+3*26^1+26*26^0,我们人力来算的话是ACZ,但是机器来算的话你除以26后产生一个1加到第二个字母上,致使第二个字母的C变成了D,其实我们也可以发现,我们A得到的是一个1,但是我们利用ACSII码来计算的时候,应该是'A'+0才是A,所以给我们提示是,对于任意的一次求字母的运算,在开始操作之前,先减1,就能消除所有烦恼

 

7-8 mmh学长的Excel表格 (20分)

mmh学长的Excel表格

在某件事情经过mmh学长的点播之后,小白尝试着给Excel表格编号。 A对应1,B对应2,以此类推,AA对应27,…………可是这样实在是太慢了, 怎么才能知道某个表格编号就知道它是第几列,或者知道它在第几列 就能快速推出表格编号呢?

输入格式:

第一行一个正整数T(T≤100000),代表T组测试数据。 接下来T行由以下形式给出: d X 本题数据全部随机且保证所涉及数据均在长整型范围内。

输出格式:

当d为1时,X为大写字母组成的字符串,为Excel某列的一个排列, 你需要输出它是第几列, 当d为2时,X为一个长整型(long long int)正整数,为Excel的第几列, 你需要输出他所对应的大写字母序列

输入样例:

2
1 A
2 1

输出样例:

1
A
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
typedef long long ll;
int t;
int order;
string st;
ll number;
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>order;
        if(order == 1)
        {
            cin>>st;
            ll power = 1;
            ll sum = 0;
            for(int i = st.length()-1; i >= 0; i--)
            {
                sum += ((st[i]-'A'+1)*power);
                power *= 26;
            }
            cout<<sum<<endl;
        }
        else
        {
            cin>>number;
            vector<char> result;
            while(number)
            {
                number--;
                ll temp = number % 26;
                result.push_back('A'+temp);
                number /= 26;
            }
            for(int i = result.size()-1; i >= 0; i--)
                cout<<result[i];
            cout<<endl;
        }
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值