大家有沒有留意過Excel表格中列名的規律呢?是這樣的:A B C ... Y Z AA AB AC ... AY AZ BA BB BC ... BY BZ ... ZZ ... AAA ...
如果沒看懂,請打開Excel程序仔細觀察一下~~
每一列都是有序號的,從1
開始編號,即:列A B C ... Y Z AA AB ...
的編號依次是 1 2 3 ... 25 26 27 28 ...
現在,請編寫程序,按照上述規律,把輸入的列名和列序號進行相互轉換(不用考慮Excel軟件實際允許的最多列數)。
輸入格式:
輸入由若干行組成,每行的內容是以下三種之一:
- 長度不超過6的由大寫字母組成的字符串,表示一個列名
- 不超過9位數字的正整數,表示一個列序號
- 符號
#
,表示輸入結束
輸出格式:
對於在輸入結束符#
之前出現的每一行輸入,若輸入為列名,在一行內打印對應的列序號;若輸入為列序號,在一行內打印對應的列名。
輸入樣例:
A
3
AB
29
#
輸出樣例:
1 C 28 AC
強哥出的題還挺好玩,類似進制轉換吧。。
代碼:
#include <iostream> #include <cstdio> #include <cstring> #include <sstream> using namespace std; string s; int d; void print(int t) { if(!t) return; print((t - 1) / 26); putchar('A' + (t - 1) % 26); } void print(string t) { int d = 0; for(int i = 0;i < t.size();i ++) { d = d * 26 + t[i] - 'A' + 1; } printf("%d\n",d); } int main() { while(cin >> s && s != "#") { if(isdigit(s[0])) { istringstream(s) >> d; print(d); putchar('\n'); } else { print(s); } } }