zoukankan      html  css  js  c++  java
  • 2Q

    Your objective for this question is to develop a program which will generate a fibbonacci number. The fibbonacci function is defined as such: 
    f(0) = 0 
    f(1) = 1 
    f(n) = f(n-1) + f(n-2) 
    Your program should be able to handle values of n in the range 0 to 50. 

    Input

    Each test case consists of one integer n in a single line where 0≤n≤50. The input is terminated by -1.

    Output

    Print out the answer in a single line for each test case.

    Sample Input

    3
    4
    5
    -1

    Sample Output

    2
    3
    5

    Hint

    you can use 64bit integer: __int64

    // 递归
     1 #include<stdio.h>
     2 
     3 long fibbonacci(int n)
     4 {
     5     if(n==0) return 0;
     6     else if(n==1) return 1;
     7     else return fibbonacci(n-1) + fibbonacci(n-2);
     8 }
     9 
    10 int main()
    11 {
    12     int n;
    13     while(scanf("%d", &n), n!=-1)
    14         printf("%d
    ", fibbonacci(n));
    15     return 0;
    16 }
    Time Limit Exceeded
    // 
    __intx
    int/long __int64

    signed: -2^31 ~ 2^31-1 ~ 2.1*10^9

    unsigned:       0 ~ 2^32-1 ~ 4.29*10^9

    signed:-2^63 ~ 2^63-1 ~ 9.2*10^18 

    unsigned:    0 ~ 2^64-1 ~ 1.8*10^19 

    // signed: scanf("%I64d",&a);    printf("%I64d",a);
      unsigned: scanf("%I64u",&a);    printf("%I64u",a);
    // 说明:
      1、int64不能用作为循环变量
      2、int64的操作速度较慢
     1 #include<stdio.h>
     2 
     3 __int64 fibbonacci(int n)
     4 {
     5     __int64 x1=0, x2=1, x3=0;
     6     int i;
     7     for(i=2;i<=n;i++)
     8     {
     9         x3=x1+x2;
    10         x1=x2; x2=x3;
    11     }
    12     if(x3) return x3;
    13     else
    14     {
    15         if(n) return x2;
    16         else return x1;
    17     }
    18 }
    19 
    20 int main()
    21 {
    22     int n; __int64 i;
    23     while(scanf("%d", &n), n!=-1)
    24     {
    25         i=fibbonacci(n);
    26         printf("%I64d
    ", i);  /* __intxx io格式 */ 
    27     }
    28     return 0;
    29 }
    AC
    // 从第47个斐波那契数开始,其大小超过int范围;
    // 从第48个斐波那契数开始,其大小超过unsigned int范围;
    // 从第93个斐波那契数开始,其大小超过__int64范围;
    // 从第94个斐波那契数开始,其大小超过unsigned __int64范围
  • 相关阅读:
    memcached+狀態模式+工廠方法使用
    狀態模式
    UML类图
    Quartz.NET
    第四次作业---计算器的第二步
    做 fzu oj 1106 题目学到的
    做fzu oj 1045 做减法学到的sprintf()函数
    第三次补作业
    第三次作业随笔(new)包含了补作业
    远征系列---离港篇(学杂记)
  • 原文地址:https://www.cnblogs.com/goldenretriever/p/10356654.html
Copyright © 2011-2022 走看看