【CodeForces】[1B]Spreadsheet

文章字数:296

问题描述

问题分析

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#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

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...