1855 - 序号互换

通过次数

0

提交次数

0

时间限制 : 3 秒 内存限制 : 128 MB

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

C++解答

#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int n,i,j;
    char str[30];
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",str);
         int t=strlen(str);
        if(str[0]>='A'&&str[0]<='Z')
           {int m=0;
            long long sum=0;
           for(i=t;i>0;i--)
            {
               sum=sum+int(str[i-1]-'A'+1)*pow(26,m);
               m++;
            }

            printf("%lld\n",sum);
           }
           else
           {   int p=0;
               for(i=0;i<t;i++)
                 p=p*10+str[i]-'0';
             for(i=0;p>0;i++)
                 {str[i]=char((p-1)%26)+'A';
                   p=(p-1)/26;
                  }
                 for(j=i-1;j>=0;j--)
                 {
                  printf("%c",str[j]);
                 }
                     printf("\n");



           }

    }


}

Java解答

import java.util.Scanner;
public class Main
{
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		int N=sc.nextInt();
		while(N-->0)
		{
			String str=sc.next();
			if(str.charAt(0)<65)
			{
				int num=Integer.parseInt(str);
				StringBuffer sb=new StringBuffer();
				if(num%26==0)
				{
					if(num/26==1)
						System.out.println("Z");
					else
						System.out.println((char)(num/26-1+64)+"Z");
				}else{
					while(num>0)
					{
						sb.append((char)(num%26+64));
						num/=26;
					}
					System.out.println(sb.reverse());
				}
			}else{
				char ch[]=str.toCharArray();
				int sum=0;
				for(int i=0;i<ch.length;i++)
				{
					sum+=Math.pow(26,ch.length-i-1)*(ch[i]-64);
				}
				System.out.println(sum);
			}
		}
	}
}