HDU 1568 Fibonacci 大數前4位

2022-03-10 22:13:42 字數 1083 閱讀 9513

**自:

分析:x=1234567.求其前四位數: log10(x)=log10(1.234567)+6. 所以1.234567=10^(log10(x)-6). 1234 =(int) 10^(log10(x)-6)*1000. [6=length-4,length=(int)log10(x)+1]同時我們知道:

對於小於10000的數字可以儲存在陣列中直接輸出,大於等於10000的數字則用上式計算。我們能知道:i<21 f[i]<1e4.當n=21時[(1-sqrt(5))/2]^n --> 0.618^n 0.618自乘5次就會退乙個10進製等級。所以n>=21可以忽略[(1-sqrt(5))/2]^n。log10(x)=log10[ 1/sqrt(5)*[(1+sqrt(5))/2]^n ]=log10(1/sqrt(5))+n*log10(1+sqrt(5))/2).

例如:log10(12345678)=log10(1.2345678*10^7)=log10(1.2345678)+7

log10(1.2345678)就是log10(12345678)的小數部分.

log10(1.2345678)=qs

10^qs=1.2345678,

要求該數的前4位,則將 1.2345678*1000即可。

#include #include #include using namespace std;  

const int maxn=50; //,mod=1e4;

int f[maxn];

int main()

int n;

double q1=log10(1/sqrt(5)),q2=log10((1+sqrt(5))/2);

while(cin>>n)

double t=q1+n*q2;

double p=t-(int)t;

double ans1=pow(10,p);

cout<

} return 0;

}

hdu 2041 超級樓梯 Fibonacci

problem description 有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少種走法?input 輸入資料首先包含乙個整數n,表示測試例項的個數,然後是n行資料,每行包含乙個整數m 1 m 40 表示樓梯的級數。output 對於每個測試例項,請輸出不同...

大數 大數相加(hdu1002)

題目描述 acm入門的第一題,兩個超出整型變數範圍的整數進行相加運算。一 因為整型裝不下,所以需要通過字串來存放。二 加法運算是從個位 末端 開始,並且涉及到進製。include includechar a 1000 b 1000 int main d 1000 為了更好的檢視,我們重新申請兩個陣列...

大數加法 HDU 1002

一般的加法只要int型別的兩數直接相加即可,大一點的數可以設為long long型別,而超過長整型的數則屬於大數問題了,大數加法其實也比較簡單,利用陣列實現就可以啦 主要思想如下 1 將大數以字串形式輸入,並轉化為陣列形式倒序儲存 2 將兩陣列對應位相加,位數滿10進1 3 判斷最高位是否為0,輸出...