GitBook

这里写图片描述

转换类的题目 难度还是有些的 不过一点一点写 感觉还好

可以当作26进制来方便思考转换

#include<stdio.h>
#include<string.h>
char s[10];
int l;
bool judge() {
	if(s[0]=='R'&&s[1]<='9'&&s[1]>='0') {
		for(int i=2; i<l; i++) {
			if(s[i]=='C')
				return true;
		}
	}
	return false;
}
int f(int m,int k) {
	int sum=1;
	while(k--)
		sum*=m;
	return sum;
}
int main() {
	int T;
	scanf("%d",&T);
	while(T--) {
		scanf("%s",s);
		l=strlen(s);
		if(judge()) {
			int tc=0;
			for(int i=0; i<l; i++) {
				if(s[i]=='C') {
					tc=i;
					break;
				}
			}
			int a=0,b=0;
			for(int i=1; i<tc; i++) {
				a=a*10+s[i]-'0';
			}
			for(int i=tc+1; i<l; i++) {
				b=b*10+s[i]-'0';
			}
			char res[10];
			int ti=0;
			while(b) {
				if(b%26) {
					res[ti++]='A'-1+b%26;
					b/=26;
				} else {
					res[ti++]='Z';
					b/=26;
					b--;
				}
			}
			for(int i=ti-1; i>=0; i--)
				printf("%c",res[i]);
			printf("%d\n",a);
		} else {
			int ti=0;
			for(int i=0; i<l; i++)
				if(s[i]<='9'&&s[i]>='0') {
					ti=i;
					break;
				}
			int x=0;
			for(int i=ti; i<l; i++)
				x=x*10+s[i]-'0';
			printf("R%dC",x);
			x=0;
			int k=1;
			for(int i=0; i<ti; i++) {
				x+=(s[i]-'A'+1)*f(26,ti-k);
				k++;
			}
			printf("%d\n",x);
		}
	}
	return 0;
}

题目地址:【CodeForces】[1B]Spreadsheet