Hojas de cálculo

  • En los sistemas de hojas de cálculo populares (por ejemplo, en Excel) se usa la siguiente numeración de columnas. La primera columna tiene el número A, la segunda, el número B, etc. hasta la columna 26 que está marcada con Z. Luego hay números de dos letras: la columna 27 tiene el número AA, 28 - AB, la columna 52 está marcada con AZ. Después de ZZ siguen números de tres letras, etc.
  • Las filas están marcadas por números enteros que comienzan con 1. El nombre de la celda es la concatenación de la columna y los números de fila. Por ejemplo, BC23 es el nombre de la celda que está en la columna 55, fila 23.
  • A veces se utiliza otro sistema de numeración: RXCY, donde X e Y son números enteros, mostrando la columna y los números de fila con respeto. Por ejemplo, R23C55 es la celda del ejemplo anterior.
  • Su tarea es escribir un programa que lea la secuencia dada de coordenadas de celda y producir cada elemento escrito de acuerdo con las reglas de otro sistema de numeración.
  • Entrada
  • La primera línea de la entrada contiene el número entero  n  (1 ≤  n  ≤ 10 ^ 5), el número de coordenadas en la prueba. Luego siguen  n  líneas, cada una de ellas contiene coordenadas. Todas las coordenadas son correctas, no hay celdas con la columna y / o los números de fila mayores a 106.
  • Salida
  • Escriba  n  líneas, cada línea debe contener las coordenadas de una celda en el otro sistema de numeración.

Tenga en cuenta que esta pregunta no es una conversión hexadecimal simple, ya que AZ corresponde a 1-26, no hay ninguna letra que corresponda a 0. Por ejemplo, cuando 26 se convierte en 26, el hexadecimal es 10, pero debería aparecer Z.

#include<bits/stdc++.h>
using namespace std;
void change1(string s){
	int t=0,a=0;
	while(t<s.size()&&s[t]>='A'&&s[t]<='Z')
		a*=26,a+=s[t++]-'A'+1;
	cout<<"R";
	while(t<s.size()) cout<<s[t++];
	cout<<"C"<<a<<endl;
}
void change2(string s){
	int t=1,a=0,b=0;
	string k="";
	while(s[t]>='0'&&s[t]<='9') a*=10,a+=s[t++]-'0';
	t++;
	while(t<s.size()) b*=10,b+=s[t++]-'0';
	while(b)
		k=(char)((--b)%26+'A')+k,b/=26; 
	cout<<k<<a<<endl;
}
int main(){
	int n;
	string s;
	cin>>n;
	while(n--){
		cin>>s;
		int t=0;
		while(s[t]>='A'&&s[t]<='Z') t++;
		while(t<s.size()&&s[t]>='0'&&s[t]<='9') t++;
		if(t==s.size()) change1(s);
		else change2(s);
	} 
	return 0;
} 

 

Supongo que te gusta

Origin blog.csdn.net/u013455437/article/details/109315775
Recomendado
Clasificación