CF1B是要转化两种坐标
我的思路是:先进行是否包含R和C及第二位是否是数字的判断,然后再通过进制转化
注意Z要特判
我的代码可能有点复杂,但方便理解
#includeusing 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<



