zoukankan      html  css  js  c++  java
  • 杭电_ACM_Fibonacci

    Problem Description
    2007年到来了。经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列
    (f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来。
    接下来,CodeStar决定要考考他,于是每问他一个数字,他就要把答案说出来,不过有的数字太长了。所以规定超过4位的只要说出前4位就可以了,可是CodeStar自己又记不住。于是他决定编写一个程序来测验zouyu说的是否正确。
     
    Input
    输入若干数字n(0 <= n <= 100000000),每个数字一行。读到文件尾。
     
    Output

                输出f[n]的前4个数字(若不足4个数字,就全部输出)。
     
    Sample Input
    0
    1
    2
    3
    4
    5
    35
    36
    37
    38
    39
    40
     
    Sample Output
    0
    1
    1
    2
    3
    5
    9227
    1493
    2415
    3908
    6324
    1023
     
    View Code
     1 #include <stdio.h>
     2 #include <math.h>
     3 short a[21] = {0, 1, 1};
     4 int main()
     5 {
     6     int i, n;
     7     double temp, result;
     8     //handle those number n <= 20
     9     for(i = 2; i <= 20; i++)
    10     {
    11         a[i] = a[i - 1] + a[i - 2];
    12     }
    13     while (scanf("%d", &n) != EOF)
    14     {
    15         //if n <= 20 then get it straightly
    16         if (n <= 20)
    17         {
    18             printf("%d\n", a[n]);
    19             continue;
    20         }
    21         //if n > 20, use the regular
    22         temp = n * log((1.0 + sqrt(5.0)) / 2.0) / log(10.0) - 0.5 * log(5.0) / log(10.0);
    23         result = pow(10.0, temp - floor(temp));
    24         //handle the result
    25         while (result < 1000)
    26             result *= 10;
    27         printf("%d\n", (int)result);
    28     }
    29     return 0;
    30 }

    pay attention

    firstly, using the regular to get the Fibonacci number, which you can find in the internet.

    secondly, because the above regular just depend on n, so you need not get all results,then input, what you must do is just according the input, then get the result only !

    thirdly, for scanf, you must use != EOF, if you use cin, you need not use it.  

    forthly, log10((double)n) = log((double)n) / log(10);

    last but not the least, the question use log10() to handle the big number.  crucial!!

  • 相关阅读:
    aspx页面按钮写返回上一页代码
    Javascript呼叫.axd文档
    获取GridView TemplateField的数据
    对象失去焦点时自己动提交数据 V2
    从图片路径获取图片尺寸
    双击一个图片然后跳转到另一个页面去
    Javascript alert消息换行
    ASP.NET播放Flash(.SWF)视频
    绑定List<T>到asp:Table控件
    Linux系统下的多线程编程条件变量&信号量
  • 原文地址:https://www.cnblogs.com/chuanlong/p/2741959.html
Copyright © 2011-2022 走看看