一道面試題,把excel的列的名稱轉換為數字

2021-07-24 15:31:50 字數 1622 閱讀 9808

這是一道某公司的上機面試題:

microsoft excel 中欄目是用 a,b,c...z;aa,ab,...zz ... zzzz ....這樣表示序列的它對應是這樣

0,1,2,...25;26,27...701 ...475253

請寫出這個對應關係。

輸入是多行輸入,輸出是輸出=原串+空格+值

例子:a 0

aa 26

aaa 702

aaaa 18278

因為看到了a-z我就以為是26進製,然後推出  (第一位) (第二位) (第三位) 這樣表示的excel 列名為 

value = 第一位*26^2+第二位*26*1+第三位

a=0 b=1 ... z=25

然後一看 aa = 26 這是什麼東東? 00 這個是沒有的。

思路不對

如果個位的a=0 b=1...z=25

非個位的 a=1 b=2 ... z=26 是否對呢?

驗證一下 

aa= 1 * 26+0=26

aaa = 1*26*26+1*26+0 = 702

aaaa = 1*26*26*26+1*26*26+1*26+0 = 18278

果然正確

那麼這個時候就急急忙忙程式設計了。(時間不多了)

#include #include #include #include #include #include using namespace std;

#define out

//// getexcelcolumnnumber: 獲得excel 的列標題

// alphanum - a-z aa-zz aaa-zzz ...

// 返回列標題的代表的序號

int getexcelcolumnnumber(string &alphanum)

tmp.clear();

putchar('\n');

}else

}else

else}}

}void main()

{ vectorinvec;

input(invec);

//string alphanum = "aa";

//cin >> alphanum;

for(int i=0;i

這個是感覺,還有就是進行了一下推理。至於原理當時沒有想那麼多。

a-z 有 26 個數

aa-zz 有 26*26個數

aaa-zzz 有26*26*26 個數

如果我們這個數是4位 (first)(second)(third)(fourth)

因為是四位數所以前面就是:

26*26*26+26*26+26

要計算的這個四位數就是:

(first-'a')*26*26*26+(second-'a')*26*26+(third-'a')*26+(fourth-'a')+26*26*26+26*26+26

=(first-'a'+1)*26*26*26+(second-'a'+1)*26*26+(third-'a'+1)*26+(fourth-'a')

這就是我把個位的數 a = 0 其他位置上的a = 1 的原因。

(如果first=a 則 first-'a'+1=1 second 等同理)

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...

一道面試題

前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...

一道面試題

如果n為偶數,則將它除以2,如果n為奇數,則將它加1或者減1。問對於乙個給定的n,怎樣才能用最少的步驟將它變到1。例如 n 61 n 60 n 2 30 n 2 15 n 16 n 2 8 n 2 4 n 2 2 n 2 1 public class myclass public static vo...