所以我遇到的問題是有兩個整數(a,b)在[1,10^16]區間內,我需要確定a^b會有多少個數字?這些數字太大而無法將它們保存在單個變量上,並且如果我將它們寫入Array,則需要很長時間。如何計算龐大數字的位數? C++
有沒有辦法用某種公式或任何簡單的方法計算數字a^b數字的數字然後數組?
所以我遇到的問題是有兩個整數(a,b)在[1,10^16]區間內,我需要確定a^b會有多少個數字?這些數字太大而無法將它們保存在單個變量上,並且如果我將它們寫入Array,則需要很長時間。如何計算龐大數字的位數? C++
有沒有辦法用某種公式或任何簡單的方法計算數字a^b數字的數字然後數組?
karakfa的數字都有它的權利。
的鹼基k
對數一些n
的,四捨五入到最接近的整數,會給你的代表n
在基地k
需要的位數。
編輯:正如在評論中指出的那樣,它不應該向上取整,而是向下取整,然後遞增1。這佔了10位的額外數字。
如果您的號碼是a^b
那麼以10爲底的對數log a^b
並使用對數定律簡化爲b log a
。請注意,此簡化發生在ceiling
函數內部,因此簡化有效。計算log a
應該不是問題(它將介於0和16之間),並且b
是已知的。只要確保在相乘之後輪迴,而不是之前。
請注意,浮點數的有限精度可能會在此方法中引入一些錯誤。如果b x log a
的真值與b x log a
的最接近的浮點表示不同,它們落在整數的不同側,則該方法失敗。你可能會發現什麼時候你接近這種狀況並以某種方式修復它。
@GaBoKaS查看Slava對karakfa的回答的評論:它應該是「floor()+ 1」而不是'ceiling「來解釋10的偶數冪。 – Patrick87
順便說一下,在32位系統上計算它並不容易。因此需要64位系統。 – KonstantinL
10個對數將給出位數。 – karakfa
你是否在尋找一個有點準確,在球場,數量或確切的數字? –
我只需要的是數字的位數,a^b的實際結果並不重要 – GaBoKaS