【问题描述】
Excel A B
中的列号是使用大写字母标识的,第一列是 ,第二列是 ,然后依
26 Z AA~ZZ
次标下去,第 列是 。之后列号变为两位从 以字典顺序标识
(AA,AB,AC...AZ,BA,BB,BC....ZZ)。再之后列号变为三位大写字母
AAA---ZZZ(AAA,AAB,AAC...AAZ,ABA...ZZZ),依次类推。
Excel 1 1 2 3
中的行号是使用数字标识的,从 开始表示第 行,第 行,第 行……
一直标下去。
Barty手中有一份非常大的表格数据,他想得知某些单元格的内容,但是他
不知道Excel中这些单元格的行号和列号分别是什么,于是请你编写程序来
帮帮他。
excel.in
excel.in
【输入文件】文件名:eexxcceell..iinn
, m n(n
第一行两个正整数数据表格允许的最大行列数 和要查询的单元格数量
<=100)。
接下来n行,每行一条格式为“XNUMXNUM”的查询
X ‘R’ ‘C’ NUM
是一个大写字母 或 ,表示行或列, 为一个整数
(0<=NUM<=10^9)。
excel.out
excel.out
【输出文件】文件名:eexxcceell..oouutt
对每一条查询,所在单元格的行号和列号,用一个空格隔开
若单元格不存在,输出-1
每条查询占一行。
【样例输入】
1003
R23C26
R94C27
R59C102
【样例输出】
23Z
94AA
-1
ac程序:
var a:array[0..10000] of longint;
m:int64;
s:string;
n,i,j,k,x,y,sum:longint;
procedure make;
var s0:char;
s1:string;
begin
s0:=s[1]; delete(s,1,pos(' ',s));
s1:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
if s0='R' then val(s1,x) else val(s1,y);
s0:=s[1]; delete(s,1,pos(' ',s));
s1:=s;
{delete(s,1,pos(s,' '));}
if s0='R' then val(s1,x) else val(s1,y);
end;
procedure main;
var k:longint;
begin
fillchar(a,sizeof(a),0);
a[0]:=1; a[1]:=y;
while a[a[0]]>26 do
begin
inc(a[0]); a[a[0]]:=a[a[0]-1] div 26;
a[a[0]-1]:=a[a[0]-1] mod 26;
if a[a[0]-1]=0 then
begin a[a[0]-1]:=26; a[a[0]]:=a[a[0]]-1; end;
end;
write(x,' '{,y});
for k:=a[0] downto 1 do
write(chr(ord('A')-1+a[k]));
{write(' ');
for k:=a[0] downto 1 do
write(a[k],' ');}
writeln;
end;
begin
assign(input,'excel.in'); assign(output,'excel.out');
reset(input); rewrite(output);
readln(m,n);
for i:=1 to n do
begin
readln(s);
x:=0; y:=0;
make;
if (x>m) or (y>m) or (x=0) or (y=0) then writeln(-1)
else main;
end;
close(input); close(output);
end.