codeforces 1B 模拟
题目大意:
给出两种行列位置的表示方法,一个是Excel表示法,一个是(R,C)坐标表示。给出一种表示,输出另外一种表示。
基本思路:
模拟,首先判断是哪一种表示法,然后转换成另外一种表示方法;
我做的时候,在(R,C)表示法转换成excel表示法的时候出了点问题,那个数字转字母的部分不会写了,所以借鉴了网上的代码:
代码如下:
//我没有处理好的部分 int tot=0; while(N){ if(N%26==0){ res[tot++]='Z'; N=N/26-1; }else{ res[tot++]='A'-1+N%26; N=N/26; } } //题解代码: #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<algorithm> using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; const int maxn = 100000+10; char str[maxn]; char res[maxn]; int main(){ int n; while(scanf("%d",&n)==1){ while(n--){ scanf("%s",str); int len=strlen(str); for(int i=0;i<len;i++){ if(str[i]>='a'&&str[i]<='z') str[i]=str[i]-'a'+'A'; } int i=0; while(i<len&&isalpha(str[i])){ i++; } while(i<len&&isdigit(str[i])){ i++; } if(i>=len){ int C=0,N=0; int id=0; while(id<len&&isalpha(str[id])){ C=C*26+str[id]-'A'+1; id++; } while(id<len&&isdigit(str[id])){ N=N*10+str[id]-'0'; id++; } printf("R%dC%d\n",N,C); }else{ int C=0,N=0; int id=1; while(id<len&&isdigit(str[id])){ C=C*10+str[id]-'0'; id++; } id++; while(id<len&&isdigit(str[id])){ N=N*10+str[id]-'0'; id++; } int tot=0; while(N){ if(N%26==0){ res[tot++]='Z'; N=N/26-1; }else{ res[tot++]='A'-1+N%26; N=N/26; } } for(int i=tot-1;i>=0;i--) printf("%c",res[i]); printf("%d\n",C); } } } return 0; }