• 杭电_ACM_Hat's Fibonacci


    Problem Description
    A Fibonacci sequence is calculated by adding the previous two members the sequence, with the first two members being both 1.
    F(1) = 1, F(2) = 1, F(3) = 1,F(4) = 1, F(n>4) = F(n - 1) + F(n-2) + F(n-3) + F(n-4)
    Your task is to take a number as input, and print that Fibonacci number.
     
    Input
    Each line will contain an integers. Process to end of file.
     
    Output
    For each case, output the result in a line.
     
    Sample Input
    100
     
    Sample Output
    4203968145672990846840663646
    
    
    Note:
    No generated Fibonacci number in excess of 2005 digits will be in the test data, ie. F(20) = 66526 has 5 digits.
    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 int f[10000][505] = {0};
     4 int main()
     5 {
     6     int n, carry, sum, i, j, length;
     7     //f[number][0] is the length of the number
     8     f[1][0] = 1;
     9     f[1][1] = 1;
    10     f[2][0] = 1;
    11     f[2][1] = 1;
    12     f[3][0] = 1;
    13     f[3][1] = 1;
    14     f[4][0] = 1;
    15     f[4][1] = 1;
    16     while (scanf("%d", &n) != EOF)
    17     {
    18         if (n < 5)
    19         {
    20             puts("1");
    21             continue;
    22         }
    23         for (i = 5; i <= n; i++)
    24         {
    25             f[i][0] = f[i - 1][0];
    26             carry = 0;
    27             //splite the number by four
    28             for (j = 1; j <= f[i][0]; j++)
    29             {
    30                 sum = f[i -1][j] + f[i - 2][j] + f[i - 3][j] + f[i - 4][j] + carry;
    31                 f[i][j] = sum % 10000;
    32                 carry = sum / 10000;
    33             }
    34             //if the carry is not zero, then the length must plus one
    35             if (carry != 0)
    36             {
    37                 f[i][0]++;
    38                 f[i][j] = carry;
    39             }
    40         }
    41         //formatted printing
    42         length = f[n][0];
    43         printf("%d", f[n][length]);
    44         for (i = length - 1; i >= 1; i--)
    45             printf("%04d",f[n][i]);
    46         printf("\n");
    47     }
    48     return 0;
    49 }

    Main points

    firstly, you can't use string in C and if the array is big, you must declare in global variable.

    secondly, the question is splitting the number by four, or you will accure Runtime Error (ACCESS_VIOLATION). The one diffence with spliting by one is you should use %d firstly, then use %04d.

  • 相关阅读:
    分梨
    18岁生日
    马的移动
    摆积木
    杭电2093考试排名
    栈的应用——四则运算表达式求值
    用指针实现对二维数组元素的访问
    用多种方法访问字符数组元素
    fread()函数和fwrite()函数进行文件操作
    hdu-1431 素数回文
  • 原文地址:https://www.cnblogs.com/chuanlong/p/2754731.html
Copyright © 2020-2023  润新知