1B. Spreadsheets

在流行的电子表格系统中(例如,在Excel中),使用以下列的计数。第一列有数字A,第二列有数字B,以此类推,直到第26列用Z标记。然后有两个字母数字:第27列有数字AA,28-AB,第52列用AZ标记。在ZZ之后有三个字母数字,等等。

行由从1开始的整数标记。单元格名称是列和行号的串联。例如,BC23是第55列第23行中单元格的名称。

有时会使用另一种计数系统:RXCY,其中X和Y是整数,分别显示列和行的数字。例如,R23C55是上一个示例中的单元格。

您的任务是编写一个程序,读取给定的单元格坐标序列,并生成根据另一个计数系统的规则编写的每个项目。

 

输入

输入的第一行包含整数n(1 ≤ n ≤ 105),即测试中的坐标数。然后有n条线,每一条都包含坐标。所有坐标都正确,没有列和/或行号大于106的单元格。

输出

写n行,每行应包含一个单元格坐标在其他记数系统。

#include <iostream>
#include <math.h>
#include<string>
using namespace std;
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        string a,b;
        string str = "";
        cin >> a;
        if (a[0]=='R')
        {
            if (a[1]>='0'&&a[1]<='9')
            {
                int j = 2;
                while (a[j] != NULL)
                {
                    if (a[j]!='C')
                    {
                        j++;
                        //cout << j << endl;
                        continue;
                    }
                    else
                    {
                        int x=0,y=0;//行和列
                        for (int k = 1; k < j; k++)
                        {
                            x = x * 10 + a[k]-48;
                        }
                        for (int k = j+1; k < a.length(); k++)
                        {
                            y = y * 10 + a[k]-48;
                        }
                        //cout << x << " " << y << endl;
                        while (y > 0) {
                            int m = y % 26;
                            if (m == 0) m = 26;
                            str += (char)(m + 64);
                            y = (y - m) / 26;
                        }
                        reverse(str.begin(), str.end());    //反序    
                        //cout << str << endl;        十进制转26进制 
                        b = str + to_string(x);
                        cout << b<<endl;
                        break;
                    }
                }

            }
        }
        if (str=="")
        {
            str += 'R';
            int j = 1;
            while (a[j]!=NULL)
            {
                if (a[j] <= '9')
                {
                    str += a[j];//记录行数
                }
                j++;
            }
            str += 'C';
            int y = 0;
            j = 0;
            while (a[j] > '9')
            {
                y = y * 26 + a[j] - 64;
                j++;
            }
            //cout <<y << endl;
            str += to_string(y);
            cout << str<<endl;
        }
    }
    return 0;
}

 

posted @ 2021-01-07 21:30  panpm  阅读(144)  评论(0)    收藏  举报