序號互換
- 描述
-
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; }