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!!

  • 相关阅读:
    mysql 使用 insert ignore into和unique实现不插入重复数据功能
    mysql 判断指定条件数据存不存在,不存在则插入
    Unity3D之如何将包大小减少到极致
    Unity3D–Texture图片空间和内存占用分析
    使用Unity3D的50个技巧:Unity3D最佳实践!
    Unity中的Path对应各平台中的Path
    unity 在移动平台中,文件操作路径详解
    unity Mathf 数学运算汇总
    解决ngui在3d场景中 点透的情况
    【整理】unity3d优化总结篇
  • 原文地址:https://www.cnblogs.com/chuanlong/p/2741959.html
Copyright © 2011-2022 走看看