CF 1B - Spreadsheets 点击打开链接
题意:对于行和列 有两种表现模式:一, R 23 C 55 即行编号和列编号。二,BC 23,字母加行编号 。其中字母类似于26进制
如BC 23 表示 列 55,行 23.
思路:只需将字母的数分开处理即可,字母和数字的转换可以类似于26进制之间的装换。不过,需注意的是,数字刚好整除26
需要特殊判断为‘Z’。
#include <iostream> #include<cstring> #include<cctype> #include<cstdio> using namespace std; const int N=1e6+10; char ch[N]; char c[1005]; int a[5]; void f1(int n) { if(n==0) return ; if(n%26==0) f1(n/26-1); else f1(n/26); char s; if(n%26==0) s='Z'; else s=n%26-1+'A'; printf("%c",s); } void f2(char *ch) { int sum=0; int len=strlen(ch); for(int i=0;i<len;i++){ sum=sum*26+ch[i]-'A'+1; } printf("%d\n",sum); } int main() { int n; int len; scanf("%d",&n); while(n--){ memset(c,0,sizeof c); memset(a,0,sizeof a); int t=0; int l=0; cin>>ch; len=strlen(ch); for(int i=0;i<len;i++){ if(isalpha(ch[i])) c[t++]=ch[i]; else{ while(!isalpha(ch[i])&&i<len){ a[l]=a[l]*10+(ch[i]-'0'); i++; } i--; l++; } } if(a[1]!=0){ f1(a[1]); printf("%d\n",a[0]); } else{ printf("R%dC",a[0]); f2(c); } } return 0; }