CF1B题解

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值