您的位置:首页 > 其它

hdu 1568 Fibonacci

2015-07-23 12:04 302 查看
原题链接:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=2§ionid=2&problemid=1

fibonacci公式:



对公式取对数:



最后一项小于0并且很小可以不用计算。

假设给出一个数10234432,

那么log10(10234432)=log10(1.0234432*10^7)=log10(1.0234432)+7;

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

10^0.010063744=1.023443198

代码如下:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int fibonacci[21] = {0,1,1};		//记录前20项的值 第21项为5位数
for (int i = 2; i < 21; i++)
fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
int n;
const double k = (1 + sqrt(5.0))*0.5;//常数
while (cin >> n)
{
if (n <= 20)
{
cout << fibonacci
<< endl;
continue;
}
double x=-0.5*log10(5.0)+n*log10(k);
x =x- floor(x);		//取小数部分
x = pow(10, x);		//取一次幂
cout << (int)(x * 1000) << endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: