蓝桥杯 地址转换 解题报告



    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;
} 







你可能感兴趣的:(进制转换,地址转换,蓝桥杯,解题报告)