hdu 1568 Fibonacci
2013-03-29 10:55
337 查看
hdu 1568 Fibonacci 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568
数学题
题目大意:中文不解释
题目分析:数很大,但好在只求前四位。可将这个大数在求出之前就表示为以10为底这个数的对数,将其整数部分砍掉(即把这个数除了10的很多倍)再用pow(10,结果)得到原数被除之后的结果,屡次*10直到满足四位即可输出。前20个单独处理,是因为式子中有应被忽略的高阶无穷小,前20误差太大。
PS:参考大神的思路,有很多收获
log(n)=ln(n);
log10(n)=lg(n);
loga(n)=以a为底n的对数;
FIbonacci通项公式;
对数运算法则;
数学题
题目大意:中文不解释
题目分析:数很大,但好在只求前四位。可将这个大数在求出之前就表示为以10为底这个数的对数,将其整数部分砍掉(即把这个数除了10的很多倍)再用pow(10,结果)得到原数被除之后的结果,屡次*10直到满足四位即可输出。前20个单独处理,是因为式子中有应被忽略的高阶无穷小,前20误差太大。
#include<stdio.h> #include<math.h> //const double f=(sqrt(5.0)+1.0)/2.0; int F[21]={0,1,1}; int main() { int n,i; double p; for(i=3;i<21;i++) { F[i]=F[i-1]+F[i-2]; } while(scanf("%d",&n)!=EOF) { if(n<21) { printf("%d\n",F ); continue; } p=-0.5*log10(5)+n*log10((sqrt(5.0)+1.0)/2.0); p-=floor(p); p=pow(10,p); while(p<1000)p*=10; printf("%d\n",(int)p); } return 0; }
PS:参考大神的思路,有很多收获
log(n)=ln(n);
log10(n)=lg(n);
loga(n)=以a为底n的对数;
FIbonacci通项公式;
对数运算法则;
相关文章推荐
- HDU 1568 Fibonacci
- 数论(fabonacci数列) hdu-1568-Fibonacci
- HDU 1568 Fibonacci 公式 *
- HDU 1568 Fibonacci 【FIB通项公式+log10取前N为位数】
- HDU 1568 Fibonacci 公式求斐波那契数列
- hdu 1568 fibonacci
- hdu 1568 Fibonacci解题思路
- HDU 1568 Fibonacci
- hdu 1568 Fibonacci
- 【HDU 1568】Fibonacci 数学公式 详解
- hdu 1568 Fibonacci
- HDU 1568 Fibonacci
- hdu 1568(Fibonacci)(就是大数的斐波那契公式)
- HDU-1568 Fibonacci【数学公式题】
- hdu 1568 Fibonacci
- HDU 1568 Fibonacci
- HDU 1568 Fibonacci 数学= = 开篇
- HDU 1568 Fibonacci
- Hdu 1568 Fibonacci
- hdu 1568 Fibonacci (数论)