快速判斷整數(shù)的位數(shù)

編程中,我們有時(shí)需要判斷一個(gè)int類型整數(shù)的位數(shù)。方法很簡(jiǎn)單,只要循環(huán)除以10,直到商為0,循環(huán)了幾次位數(shù)就是幾。

不過(guò),這或許不是效率最高的方案,因?yàn)槌ㄟ\(yùn)算很慢。能不能不做運(yùn)算就判斷出位數(shù)呢?

看下面這段神奇的代碼:

final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
                                      99999999, 999999999, Integer.MAX_VALUE };

// Requires positive x
static int stringSize(int x) {
    for (int i=0; ; i++)
        if (x <= sizeTable[i])
            return i+1;
}

調(diào)用stringSize方法,就可以計(jì)算出x的位數(shù)(x必須為正數(shù))。該方法內(nèi)部做了若干次比較操作,與事先定義的sizeTable比較,找到第一個(gè)比x大的數(shù),返回對(duì)應(yīng)的下標(biāo)加1即可。

因?yàn)閕nt類型的整數(shù)位數(shù)不會(huì)超過(guò)10,因此定義sizeTable并不麻煩。即使想要計(jì)算long類型整數(shù)的位數(shù),仍然可以用這種方法,只需要把sizeTable的長(zhǎng)度增加一倍即可。

在我電腦上測(cè)試時(shí),1億次計(jì)算,這種方法比除以10的方法快5倍。
(速度差距沒(méi)想象中大orz)

最后,告訴大家一個(gè)秘密,這段代碼來(lái)自于Java源碼中的Integer類,感興趣的同學(xué)可以自行查看。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容