您的位置:首页 > 其它

蓝桥杯 地址转换 解题报告

2015-02-25 21:28 190 查看
    Excel是最常用的办公软件。每个单元格都有唯一的地址表示。比如:第12行第4列表示为:“D12”,第5行第255列表示为“IU5”。

    

    事实上,Excel提供了两种地址表示方法,还有一种表示法叫做RC格式地址。 第12行第4列表示为:“R12C4”,第5行第255列表示为“R5C255”。

    你的任务是:编写程序,实现从RC地址格式到常规地址格式的转换。

【输入、输出格式要求】

    用户先输入一个整数n(n<100),表示接下来有n行输入数据。

    接着输入的n行数据是RC格式的Excel单元格地址表示法。

    程序则输出n行数据,每行是转换后的常规地址表示法。

    例如:用户输入:

2

R12C4

R5C255

    则程序应该输出:

D12

IU5

【注意】

    请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!

    

    在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。

如果要是不理解题目,可以真的打开excel看看,仔细观察就可以看出,实际上是一个26进制数转换,而且还只要转换列数就可以了,另外,在转换的时候有简易版和完整版,因为题目没有对数据范围进行规定,而且这又是蓝桥杯中的题目,所以可以肯定,两位之内应该是能水过的,事实上也正是如此,测试数据中没有出现多余2位的,但实际上完整版也不会太难。

#include<iostream>
#include<memory.h>
using namespace std;
int main()
{
int r,c,end,temp,right;
int cas;
int i,j;
char rc[20];
cin>>cas;
while(cas--)
{
memset(rc,'*',sizeof(rc));
cin>>rc;
for(i=0;rc[i]!='*';i++)
{
if(rc[i]=='R')
r=i;
else if(rc[i]=='C')
c=i;
}
end=i;
right=1;
temp=0;
for(i=c-1;i>r;i--)
{
temp+=(rc[i]-'0')*right;
right*=10;
}
r=temp;

right=1;
temp=0;
for(i=end-2;i>c;i--)
{
temp+=(rc[i]-'0')*right;
right*=10;
}
c=temp;
if(c>26)
{
temp=c/26;
cout<<(char)(temp+'A'-1);
}
temp=(c-1)%26;
cout<<(char)(temp+'A');
cout<<r<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息