序号互换
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
-
Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐标快速计算出来。单元格的行坐标是由数字编号的数字序号,而列坐标使用字母序号。观察字母序号,发现第1列到第26列的字母序号分别为A,B,…,Z,接着,第27列序号为AA,第28列为AB,依此类推。
若给Dr.Kong的机器人卡多一个数字序号(比如32),它能很快算出等价的字母序号(即AF),若给机器人一个字母序号(比如AA)),它也能很快算出等价的数字序号(27),你能不能与卡多比试比试,看谁能算得更快更准确。
- 输入
- 第一行: N 表示有多少组测试数据。
接下来有N行, 每行或者是一个正整数,或者是一个仅由大写字母组成的字符串。
输入保证,所有数字序号和字母序号对应的数字序号均 ≤ 2*10^9 输出 - 对于每一行测试数据,输出一行。如果输入为一个正整数序号,则输出等价的字母序号;如果输入为字符串,则输出等价的数字序号。 样例输入
-
3
-
27
-
G
-
AA
样例输出 -
AA
-
7
-
27
-
比较坑的题目:26进制和10进制的转换 要 注意52 78 702 这些数据
-
#include<stdio.h> #include<math.h> #include<stdlib.h> #include<string.h> void zimu(char *s,int l) { int i,sum=0,k=0; for(i=l-1;i>=0;i--) { sum+=(s[i]-'A'+1)*pow(26,k++); } printf("%d\n",sum); } void shuzi(char *s,int l) { int i,sum=0,yushu,weishu; for(i=0;i<l;i++) { sum=sum*10+s[i]-'0'; s[i]='\0'; } weishu=0; while(sum) { yushu=sum%26; sum/=26; if(yushu)//余数不为0 { s[weishu++]='A'+yushu-1; } else { s[weishu++]='Z'; sum-=1; } } for(i=weishu-1;i>=0;i--) printf("%c",s[i]); printf("\n"); } int main() { int t,i,j,l; char s[1000]; scanf("%d",&t); while(t--) { scanf("%s",s); l=strlen(s); if(s[0]>='1'&&s[0]<='9') shuzi(s,l); else zimu(s,l); } return 0; }
- 第一行: N 表示有多少组测试数据。