此思想借助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...