CodeForces 1B(模拟 + excel的行列表示转换 )

    xiaoxiao2026-09-24  14

    Spreadsheets Time Limit:10000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit  Status  Practice  CodeForces 1B

    Description

      在一些知名的表格处理系统中(比如:excel表格),我们经常用大写的字母来表示列,例如A表示第1列,B表示第2列,第26列用Z来表示,同时第27列我们用AA来表示,第28列我们用AB来表示,第29列我们用AC来表示,AZ表示第52列,ZZ之后我们就需要用3个字母来表示列了。   行的表示比较简单,我们一般用正整数来表示,比如1就表示第1行,5就表示第5行,行和列一起表示成为类似BC23的情况,这个表示在第23行,第55列。   有时候,我们的系统也会用RXCY的格式来表示,X和Y是整数,分别表示行号和列号。例如:R23C55表示的位置和之前那个例子是一样的。   你的任务是写一个程序,将这些位置在两种不同的表示方法之间转化。

    Input

    第一行是一个正整数n(1<=n<=10^5), 表示测试数据的数量。 接下来n行,每行一串字符,表示一个位置,输入保证所有的位置都是正确的,没有一个位置的行号或者列号超过10^ 6。

    Output

    输出n行,每行是对应的位置的转化结果。

    Sample Input

    2 R23C55 BC23

    Sample Output

    BC23 R23C55
    题意:互相转换excel的两种表示方法的互相转换。 #include <stdio.h> #include <string.h> #include <queue> #include <stdlib.h> #include <math.h> #include <algorithm> typedef long long ll; #define oo 0x3f3f3f3f using namespace std; #define N 110 char s1[N],s2[N]; int main() { int T,i; ll num1,num2; scanf("%d",&T); while(T--) { scanf("%s",s1); if(s1[0]=='R') { i=1,num1=0; while(s1[i]>='0' &&s1[i]<='9') num1=num1*10+s1[i++]-'0'; if(i>1 && s1[i]=='C') { i++; num2=0; while(s1[i]>='0' && s1[i]<='9') { num2=num2*10+s1[i++]-'0'; } int j=0; while(num2>0) { s2[j++]=(num2-1)%26+'A'; if(num2%26==0) num2=num2/26-1; else num2=num2/26; } for(j--;j>=0;j--) if(s2[j]>='A' && s2[j]<='Z') printf("%c",s2[j]); printf("%I64d\n",num1); continue; } } i=0;num1=0;num2=0; while(s1[i]>='A' &&s1[i]<='Z') num2=num2*26+s1[i++]-'A'+1; while(s1[i]>='0' &&s1[i]<='9') num1=num1*10+s1[i++]-'0'; printf("R%I64dC%I64d\n",num1,num2); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1312272.html
    最新回复(0)