線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4175
推到 Plurk!
推到 Facebook!

請問一個26進位的問題

缺席
cat200188
中階會員


發表:37
回覆:78
積分:68
註冊:2005-01-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-03-27 10:28:00 IP:220.130.xxx.xxx 訂閱
請問一個26進位的問題,和10進位一樣,27進1,如 1=A ,26=Z,27=AA,請問程式該如何表示
------
.......
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-03-27 10:46:56 IP:61.218.xxx.xxx 訂閱
26進位,26應該是A0,不是Z
AA=26 1=27
A0=26 0=26
===================引 用 cat200188 文 章===================
請問一個26進位的問題,和10進位一樣,27進1,如 1=A ,26=Z,27=AA,請問程式該如何表示
------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
cat200188
中階會員


發表:37
回覆:78
積分:68
註冊:2005-01-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-03-27 11:22:54 IP:220.130.xxx.xxx 訂閱
謝謝,已經解出,此方法為換算excel表格欄位到是多少
------
.......
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-03-30 12:55:13 IP:61.67.xxx.xxx 未訂閱
其實我常對大家提到po文時的應有態度, 不要用迂迴試探的語法求大家解法, 因為如果我們不清楚你的前因後果, 往往回答出來的很可能是被導入錯誤的想法中, 反而給了一個很錯誤的做法, 所以如果你一開始就提是要轉換excel的位址那就很明朗化了
這是我的轉換公式, 提供你參考(雖然你已解出, 不過也期待你可以與大家分享你的解法)
function getCell(cellno: integer): string;
const achar: array[0..26] of Char = (' ','A','B','C','D','E','F','G','H',
'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
var modnum: integer;
divnum: integer;
begin
// Z=26, AZ=52, BZ=78 CZ=78 26....
modnum:= cellno mod 26;
if modnum=0 then modnum:= 26;
if cellno > 26 then divnum:= cellno div 26
else divnum:= 0;
if (modnum=26) and (divnum>0)
then result:= trim(achar[divnum-1] achar[modnum])
else result:= trim(achar[divnum] achar[modnum]);
end;

註:這支程式是在解excel的column, 例如第35column 在 excel 中是那一個位址(例如 AI), 至於 ROW沒有併到這裡計算, 也沒有必要)
另外, 這也不是叫26進位的演算法
編輯記錄
P.D. 重新編輯於 2008-03-30 12:59:16, 註解 無‧
P.D. 重新編輯於 2008-03-30 13:01:07, 註解 無‧
cat200188
中階會員


發表:37
回覆:78
積分:68
註冊:2005-01-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-03-31 13:18:54 IP:220.130.xxx.xxx 訂閱
謝謝版主說明,我剛開始的標頭說明應該是錯了,應該直接寫明轉換excel標頭寫法,在此分享一下我的寫法,可能有很多bug,請各位指正
function datatoexcel(vv:integer):String;
const data :array[0..26] of String =('','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
var i,j:integer ;
begin
i:=vv;
result:='';
if i <= 26 then
begin
result := data[i];
end
else
begin
if i mod 26 = 0 then
begin
j:=26;
end
else
begin
j:= i mod 26 ;
end;
result:=datatoexcel(i div 26) data[j];
end;
end;
------
.......
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-03-31 14:16:24 IP:61.67.xxx.xxx 未訂閱
其實你的原理與我的是一致的想法, 只是流程判斷寫法不一樣, 恭喜你可以自己想出哦!
系統時間:2024-04-25 13:24:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!