题目
原题链接:B. Spreadsheets
题意
26进制转换,若格式为R(X)C(Y),这输出26进制的Y和10进制X,否则输出10进制R(X)C(Y)。
代码
#include<bits/stdc++.h>
using namespace std;
char s[11000];
void solve1() {
int l=strlen(s);
int num1=0,num2=0;
int i=1;
while(s[i]>='0' && s[i]<='9') {
num2=num2*10+s[i]-'0';
i++;
}
for(i++; i<l; i++) {
num1=num1*10+s[i]-'0';
}
char tmp[10000];
int cnt=0;
while(num1) {
if(num1%26==0) {
tmp[cnt++]='Z';
num1=num1/26-1;
} else {
tmp[cnt++]=64+num1%26;
num1/=26;
}
}
for(i=cnt-1; i>=0; i--) {
printf("%c",tmp[i]);
}
printf("%d\n",num2);
}
void solve2() {
int l=strlen(s);
int num1=0,num2=0;
int i=0;
while(s[i]>='A' && s[i]<='Z'){
num1=num1*26+s[i]-'A'+1;
i++;
}
for(;i<l;i++){
num2=num2*10+s[i]-'0';
}
printf("R%dC%d\n",num2,num1);
}
int main() {
int n;
scanf("%d",&n);
while(n--) {
int flag=0;
scanf("%s",s);
for(int i=0; i<strlen(s); i++) {
if(s[i]<='9' && s[i]>='0' && s[i+1]>='A' && s[i+1]<='Z') {
flag=1;
}
}
if(flag)
solve1();
else
solve2();
}
return 0;
}