使用公式來解決問題:給定一個(gè)十進(jìn)制的正整數(shù),將其轉(zhuǎn)換成指定進(jìn)制的數(shù)。如下圖1所示,在單元格A2中是給定的十進(jìn)制正整數(shù)值,單元格B2中是指定的進(jìn)制,示例中是4進(jìn)制,單元格C2中是轉(zhuǎn)換后的結(jié)果,單元格D2中使用公式檢驗(yàn)結(jié)果是否正確。

圖4
這里,我們可以看到“結(jié)果”列中的值并不依賴于上面的每一行,這次可以使用下面簡(jiǎn)單的公式得到3:
=MOD(INT($A$2/10^0),10)
沿著這個(gè)思路來構(gòu)造上述方法的數(shù)組版本。我們唯一需要確定的事情是執(zhí)行計(jì)算的數(shù)組大小,即在指定進(jìn)制下所需要的最大指數(shù)是多少?
在上面的示例中,顯然需要的是“百”。因此,對(duì)于我們的10的指數(shù)需要由三個(gè)元素組:0、1和2組成的數(shù)組。如果考慮值10,301,444,那么顯然需要達(dá)到10^7,因此我們的數(shù)組將由8個(gè)元素組成(從10^0到10^7)。
實(shí)際上,這里決定采用一種比較“懶惰”的方法。不是動(dòng)態(tài)確定此值,而是簡(jiǎn)單地使用了一個(gè)較大的(至少以Excel術(shù)語來說)索引上限20。
當(dāng)然,當(dāng)我們使用除10以外的進(jìn)制(基數(shù))時(shí),此過程也沒有什么不同。以本文開始時(shí)給出的示例為例,即將552轉(zhuǎn)換為4進(jìn)制數(shù),其部分公式為:
B2^(ROW(INDIRECT(“1:20”))-1)
得到一個(gè)由20個(gè)值組成的數(shù)組,該數(shù)組由4的0至19次方的結(jié)果組成:
{1;4;16;64;256;1024;4096;16384;65536;262144;1048576;4194304;16777216;67108864;268435456;1073741824;4294967296;17179869184;68719476736;274877906944}
然后被552除并向下取整:
FLOOR(A2/{1;4;16;64;256;1024;4096;16384;65536;262144;1048576;4194304;16777216;67108864;268435456;1073741824;4294967296;17179869184;68719476736;274877906944},1)
得到:
{552;138;34;8;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
接著,求除以4的余數(shù):
MOD({552;138;34;8;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0},B2)
得到第一個(gè)數(shù)組:
{0;2;2;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
第二個(gè)數(shù)組更直接,由10的0至19次方的結(jié)果組成:
{1;10;100;1000;10000;100000;1000000;10000000;100000000;1000000000;10000000000;100000000000;1000000000000;10000000000000;100000000000000;1000000000000000;10000000000000000;100000000000000000;1000000000000000000;10000000000000000000}
因此,最后的結(jié)果為:
=SUMPRODUCT({0;2;2;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}*{1;10;100;1000;10000;100000;1000000;10000000;100000000;1000000000;10000000000;100000000000;1000000000000;10000000000000;100000000000000;1000000000000000;10000000000000000;100000000000000000;1000000000000000000;10000000000000000000})
得到20220。
可以檢驗(yàn)結(jié)果是否正確。如下:
(2X4^4)+(0X4^3)+(2X4^2)+(2X4^1)+(0X4^0)
等于:
(2X256)+(0X64)+(2X16)+(2X4)+(0X1)
等于:
512+0+32+8+0
結(jié)果為:
552。






