• 大菲波数(Fibonacci)java大数(hdu1715)


    大菲波数

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 11520 Accepted Submission(s): 3911


    Problem Description
    Fibonacci数列,定义如下:
    f(1)=f(2)=1
    f(n)=f(n-1)+f(n-2) n>=3。
    计算第n项Fibonacci数值。
     
    Input
    输入第一行为一个整数N,接下来N行为整数Pi(1<=Pi<=1000)。
     
    Output
    输出为N行,每行为对应的f(Pi)。
     
    Sample Input
    5
    1
    2
    3
    4
    5
     
    Sample Output
    1
    1
    2
    3
    5
     
     
    又一道大数题;
     
     
    题意很清楚;就是求Fibonacci数列,
     
    java一些注意事项,
     
     
    import java.math.*;
    import java.util.*;
    
    public class Main1715 {//记得把类名改为Main,,,额,表示自己粗心交了3次。。。
    
            public static void main(String args[]){
                
                BigInteger f[] = new BigInteger[1001] ;
                f[1]=new BigInteger("1");
                f[2]=new BigInteger("1");
                for(int i=3;i<=1000;i++){
                    f[i]=f[i-1].add(f[i-2]);//大数相加用add;
                }
                Scanner sc = new Scanner(System.in);
                int N;
                int Pi;
                N=sc.nextInt();
                while(N-->0){
                    Pi=sc.nextInt();
                    System.out.println(f[Pi]);
                }
            }
    }

    另外也有用c做的,可以参考!

    #include<stdio.h>
    #include<string.h>
    char s[1005][1005];
    int main()
    {
        int i,j,wei,c,n;
         memset(s,'0',sizeof(s));//初始化数组
         s[0][0]='0';
         s[1][0]='1';
         s[2][0]='1';
         wei=1;//控制位数
         for(i=3;i<=1001;i++)//控制行数
         {
             int he;//两数相加之和
             wei++;//控制列数
             c=0;//进位指数的初值
             for(j=0;j<=wei;j++)//控制列数的循环
             {
                 he=s[i-1][j]-'0'+s[i-2][j]-'0'+c;
                 c=he/10;//满十进位
                 s[i][j]=he%10+'0';//满十的话,将舍位
             }
         }
         while(scanf("%d",&n)==1)
         {
             int i;
             for(i=1;i<=n;i++)
             {
                 int t=1001,a,j;
                 scanf("%d",&a);
                 while(t--)
                 {
                     if(s[a][t]!='0')//从最开始搜索第一个不为‘0’的字符
                         break;
                 }
                 for(j=t;j>=0;j--)//从后往前输出
                     printf("%c",s[a][j]);
                 printf("
    ");
             }
         }
    }
    View Code
  • 相关阅读:
    【Go】http server 性能测试
    【go】基础
    【Git】gitcongfig 增删改查
    【go】sdk + idea-plugin 开发工具安装
    【Ibatis】总结各种使用技巧
    【nodejs】jade模板入门
    各语言技术列表
    【nodejs】 npm 注意事项
    PAT-l3-002堆栈
    统计相似字符串
  • 原文地址:https://www.cnblogs.com/yuyixingkong/p/3930285.html
Copyright © 2020-2023  润新知