第四屆河南省程序設計大賽 序號互換 nyoj 303

序號互換

時間限制: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進制轉換A B C D...Y Z爲1 2 3 4...25 0   

注意數字換字母時 當字母爲Z時商要特別處理:減一

貼代碼吧



#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
char a[500];
void dig(int len)
{
	long sum=0;
	for(int i=len-1,j=0;i>=0;i--,j++)
	{
		sum+=(long)pow(26,j)*(a[i]-'A'+1);
	}
	printf("%ld\n",sum);
	//return;
}
void zim(int len)
{
	int i=0;
	long sum;
	char c[500];
	sum=atol(a);//字符轉換爲long型數據 
	while(sum)
	{
		long t;
		t=sum%26;
		sum=sum/26;
		if(t==0)c[i++]='Z',sum-=1;
		else c[i++]=t+'A'-1;
	}
	for(int j=i-1;j>=0;j--)
	printf("%c",c[j]);
	printf("\n");
	//return ;
}
int main()
{
	int n,len;
	scanf("%d",&n);
	while(n--)
	{
	    scanf("%s",a);
		len=strlen(a);
		if(a[0]>='A') dig(len);
		else zim(len);
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章