题意:两个系统间的表示法转化
spreadsheets systems用字符表示列,"A"~"Z"分别表示1~26,"AA"~"AZ"表示27~52,依次类推;数字表示行。例如,BC23表示第23行第55列。
numeration system用R(int)C(int)表示。例如,R23C55表示第23行第55列。
其实这道题就是简单的字符串处理,关键是如何辨别给定的是哪种系统的表示法,只有解决这个问题,其他的就没有什么大问题了
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<stdlib.h>
#include<cmath>
#include<string>
#include<algorithm>
#include<iostream>
#define exp 1e-10
using namespace std;
const int N = 40001;
const int inf = 1000000000;
const int mod = 2009;
char s[N],w[4][N];
int main()
{
int t,i,j,k,r,c;
bool flag;
scanf("%d",&t);
while(t--)
{
memset(w,0,sizeof(w));
scanf("%s",s);
for(flag=true,k=i=j=0;s[i]!='\0';i++)
{
if(flag&&s[i]>='0'&&s[i]<='9')
w[k][j]='\0',k++,j=0,flag=false;
else if(!flag&&s[i]>='A'&&s[i]<='Z')
w[k][j]='\0',k++,j=0,flag=true;
w[k][j++]=s[i];
}
if(k==1)
{
for(r=c=i=0;w[0][i]!='\0';i++)
c=c*26+w[0][i]-'A'+1;
for(i=0;w[1][i]!='\0';i++)
r=r*10+w[1][i]-'0';
printf("R%dC%d\n",r,c);
}
else if(k==3)
{
for(r=c=i=0;w[3][i]!='\0';i++)
c=c*10+w[3][i]-'0';
i=0;
while(c)
{
w[3][i++]=(c-1)%26+'A';
c=(c-1)/26;
}
for(i--;i>=0;i--)
printf("%c",w[3][i]);
for(i=0;w[1][i]!='\0';i++)
r=r*10+w[1][i]-'0';
printf("%d\n",r);
}
}
}
菜鸟成长记