CF1B是要转化两种坐标
我的思路是:先进行是否包含R和C及第二位是否是数字的判断,然后再通过进制转化
注意Z要特判
我的代码可能有点复杂,但方便理解
#include<bits/stdc++.h>
using namespace std;
int main() {
long long shu;
cin>>shu;
for(long long ak = 1;ak <= shu;ak++){
string a;
cin>>a;
if(isdigit(a[1]) and a[0] == 'R' and a.find("C") < a.size()){
long long k = 0,z = 0;
for(long long i = 1;i < a.find("C");i++){
k *= 10;
if(a[i] == '1'){
k += 1;
}
if(a[i] =='2'){
k += 2;
}
if(a[i] == '3'){
k += 3;
}
if(a[i] == '4'){
k += 4;
}
if(a[i] == '5'){
k += 5;
}
if(a[i] == '6'){
k += 6;
}
if(a[i] == '7'){
k += 7;
}
if(a[i] == '8'){
k += 8;
}
if(a[i] == '9'){
k += 9;
}
}
for(long long i = a.find("C") + 1;i < a.size();i++){
z *= 10;
if(a[i] == '1'){
z += 1;
}
if(a[i] =='2'){
z += 2;
}
if(a[i] == '3'){
z += 3;
}
if(a[i] == '4'){
z += 4;
}
if(a[i] == '5'){
z += 5;
}
if(a[i] == '6'){
z += 6;
}
if(a[i] == '7'){
z += 7;
}
if(a[i] == '8'){
z += 8;
}
if(a[i] == '9'){
z += 9;
}
}
string v;
long long l = 0;
while(z != 0){
l++;
if(z % 26 == 0){
v[l] = 'Z';
z -= 26;
}
if(z % 26 == 1){
v[l] = 'A';
z -= 1;
}
if(z % 26 == 2){
v[l] = 'B';
z -= 2;
}
if(z % 26 == 3){
v[l] = 'C';
z -= 3;
}
if(z % 26 == 4){
v[l] = 'D';
z -= 4;
}
if(z % 26 == 5){
v[l] = 'E';
z -= 5;
}
if(z % 26 == 6){
v[l] = 'F';
z -= 6;
}
if(z % 26 == 7){
v[l] = 'G';
z -= 7;
}
if(z % 26 == 8){
v[l] = 'H';
z -= 8;
}
if(z % 26 == 9){
v[l] = 'I';
z -= 9;
}
if(z % 26 == 10){
v[l] = 'J';
z -= 10;
}
if(z % 26 == 11){
v[l] = 'K';
z -= 11;
}
if(z % 26 == 12){
v[l] = 'L';
z -= 12;
}
if(z % 26 == 13){
v[l] = 'M';
z -= 13;
}
if(z % 26 == 14){
v[l] = 'N';
z -= 14;
}
if(z % 26 == 15){
v[l] = 'O';
z -= 15;
}
if(z %26 == 16){
v[l] = 'P';
z -= 16;
}
if(z % 26 == 17){
v[l] = 'Q';
z -= 17;
}
if(z % 26 == 18){
v[l] = 'R';
z -= 18;
}
if(z % 26 == 19){
v[l] = 'S';
z -= 19;
}
if(z % 26 == 20){
v[l] = 'T';
z -= 20;
}
if(z % 26 == 21){
v[l] = 'U';
z -= 21;
}
if(z %26 == 22){
v[l] = 'V';
z -= 22;
}
if(z % 26 == 23){
v[l] = 'W';
z -= 23;
}
if(z % 26 == 24){
v[l] = 'X';
z -= 24;
}
if(z % 26 == 25){
v[l] = 'Y';
z - 25 ;
}
z /= 26;
}
for(long long i = l;i >= 1;i--){
cout<<v[i];
}
cout<<k;
}
else{
long long l = 0;
long long z = 0;
while(!(isdigit(a[l]))){
z *= 26;
z += (int)a[l] - 64;
l++;
}
long long k = 0;
for(long long i = l;i < a.size();i++){
k *= 10;
if(a[i] == '1'){
k += 1;
}
if(a[i] =='2'){
k += 2;
}
if(a[i] == '3'){
k += 3;
}
if(a[i] == '4'){
k += 4;
}
if(a[i] == '5'){
k += 5;
}
if(a[i] == '6'){
k += 6;
}
if(a[i] == '7'){
k += 7;
}
if(a[i] == '8'){
k += 8;
}
if(a[i] == '9'){
k += 9;
}
}
cout<<"R"<<k<<"C"<<z;
}
cout<<endl;
}
}