zoukankan      html  css  js  c++  java
  • HDU 1715 大菲波数

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1715

    MS我写的比较麻烦,各种进位什么的,学长说用递归加打表就可以搞定。

    我的

    View Code
     1 #include<stdio.h>
     2 #include<string.h>
     3 #define max 1000
     4 char n1[max],n2[max],n3[max];
     5 void add(char *n1,char *n2,char *n3)
     6 {
     7     memset(n3,0,max);
     8     int len=strlen(n1);
     9     int i;
    10     for(i=0;i<len;i++)
    11     {
    12         n3[i]=n1[i]-'0'+n2[i]-'0'+n3[i];
    13         if(n3[i]>=10)
    14         {
    15             n3[i]=n3[i]-10+'0';
    16             n3[i+1]=1;
    17         }
    18         else n3[i]+='0';
    19     }
    20     if(n2[i]!=0)n3[i]=n2[i]+n3[i];
    21     else if(n3[i]!=0) n3[i]+='0';
    22 
    23 }
    24 void prn(char *p)
    25 {
    26     int i=strlen(p)-1;
    27         for(;i>=0;i--)
    28         {
    29             printf("%c",p[i]);
    30         }
    31         printf("\n");
    32 }
    33 int main()
    34 {
    35     int i,n,t;
    36     scanf("%d",&n);
    37     while(n--)
    38     {
    39         scanf("%d",&t);
    40         if(t==1||t==2)
    41         {
    42             printf("1\n");
    43             continue;
    44         }
    45         memset(n1,0,max);
    46         n1[0]='1';
    47         memset(n2,0,max);
    48         n2[0]='1';
    49         for(i=3;i<=t;i++)
    50         {
    51             add(n1,n2,n3);
    52             strcpy(n1,n2);
    53             strcpy(n2,n3);
    54         }
    55         prn(n3);
    56     }
    57     return 0;
    58 }

    学长的

    View Code
     1 const int N = 1007;
     2 int f[N][217];
     3 int main() {
     4     int i, j;
     5     f[1][0] = f[2][0] = 1;
     6     for(i = 3; i < N; i++) {
     7         for(j = 0; j <= 210; j++)
     8             f[i][j] = f[i-1][j]+f[i-2][j];
     9         int flag = 0;
    10         for(j = 0; j <= 210; j++) {
    11             int tmp = f[i][j] + flag;
    12             flag = tmp/10;
    13             f[i][j] = tmp%10;
    14         }
    15     }
    16     //freopen("data.in", "r", stdin);
    17     int n, pi;
    18     cin >> n;
    19     while(n--) {
    20         cin >> pi;
    21         i = 210;
    22         while(f[pi][i] == 0)
    23             i--;
    24         for(;i >= 0; i--)
    25             printf("%d", f[pi][i]);
    26         printf("\n");
    27     }
    28     return 0;
    29 }
  • 相关阅读:
    剑指OFFER----面试题17- 打印从1到最大的n位数
    剑指OFFER----面试题16. 数值的整数次方
    剑指OFFER----面试题15. 二进制中1的个数
    剑指OFFER----面试题14- II. 剪绳子II
    07 多层if判断
    08 while循环
    06 if 流程控制
    03 身份运算符、逻辑运算符
    04 位运算符、运算符优先级
    02 赋值运算符、成员运算符
  • 原文地址:https://www.cnblogs.com/timeship/p/2622136.html
Copyright © 2011-2022 走看看