取乙個大數的前幾位

2022-06-21 20:00:14 字數 735 閱讀 2271

此思想借助2.2.1來幫助理解:

先看對數的性質,loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c);

假設給出乙個數10234432,那麼log10(10234432)=log10(1.0234432*10^7)=log10(1.0234432)+7;

log10(1.0234432)就是log10(10234432)的小數部分.

log10(1.0234432)=0.010063744

10^0.010063744=1.023443198

那麼要取幾位就很明顯了吧~

先取對數(對10取),然後得到結果的小數部分bit,pow(10.0,bit)以後如果答案還是<1000那麼就一直乘10。

注意偶先處理了0~20項是為了方便處理~

這題要利用到數列的公式:an=(1/√5) * [((1+√5)/2)^n-((1-√5)/2)^n](n=1,2,3.....)

取完對數

log10(an)=-0.5*log10(5.0)+((double)n)*log(f)/log(10.0)+log10(1-((1-√5)/(1+√5))^n)

其中f=(sqrt(5.0)+1.0)/2.0;

因為log10(1-((1-√5)/(1+√5))^n)趨近於0

所以可以寫成log10(an)=-0.5*log10(5.0)+((double)n)*log(f)/log(10.0);

最後取其小數部分。

取乙個數的前幾位

先看對數的性質,loga b c c loga b loga b c loga b loga c 每次給的數字數都不確定,通過取對數變得很簡單 假設給出乙個數10234432,用科學計數法1.0234432 10 7表示,那麼log10 10234432 log10 1.0234432 10 7 l...

大數(乙個大數乘上乙個int的數)

大數 用int 或 long long 存不下的數,大數的運算包括很多加減乘除等等,在此介紹一種很簡單的大數,就是大數乘上乙個int形的數。思路 很簡單就是模擬先把字串反轉,然後模擬人計算乘法的時候,先拿乙個數記錄下來進製,然後在下次乘之前加到結果上。includeusing namespace s...

藍橋杯 乙個大數邊界引發的血案

坑題,輸入乙個不超過18446744073709551615的正整數a,輸出a 2。18446744073709551615是unsigned long long 可取的最大值,因此可以特判一下,定義乙個unsigned long long型別的a,若輸入的a 1844674407370955161...