码迷,mamicode.com
首页 > 其他好文 > 详细

一道我觉得比较叼的斐波那契数了

时间:2015-03-08 21:30:55      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

思路:

//hdu1316

由于a,b的范围(0,10的100次方)先用数组对大数进行储存一下,求在a,b的范围内有多少项斐波那契数,先用二维数组进行存储

然后求出a,b这两个数的长度,然后遍历二维数组中存储的斐波那契的长度直到找到大于a的长度的那一项跳出来,然后判断前一项如果

长度等于a且等于a,则count++,,,,然后同理,,直到遍历到大于b的长度

代码:

#include<stdio.h>
#include<string.h>
long s[10000][200]={0};
char t[10000][200];
int main()
{
    char a[200],b[200];
    long i,j,n,m,count,k;
    s[1][0]=1;
    s[2][0]=2;
    k=0;
    for(i=3;i<10000;i++)
        for(j=0;j<200;j++)
        {
            k+=s[i-1][j]+s[i-2][j];
            s[i][j]=k%10;
            k/=10;
        }
    while(k&&j<200)
        {
            s[i][j++]=k%10;
            k/=10;
        }
    for(i=10000-1;i>=1;i--)
    {
        k=0;
        for(j=200-1;j>=0;j--)
            if(s[i][j]!=0)
                break;
        for(;j>=0;j--)
                t[i][k++]=s[i][j]+48;
        t[i][k]=‘\0‘;
    }
    while(scanf("%s%s",a,b)>0)
    {
        count=0;
        n=strlen(a);
        m=strlen(b);
        if(a[0]==‘0‘&&b[0]==‘0‘)
            break;
        for(i=1;strlen(t[i])<n;i++);
        while(1)
        {
        if(strlen(t[i])==n)
            {
                if(strcmp(t[i],a)<0)
                    i++;
                else
                    break;
            }
            else
                break;
        }
        for(;i<10000;i++)
        {
        if(strlen(t[i])<m)
                count++;
            else
                if(strlen(t[i])==m)
                {
                    if(strcmp(t[i],b)<=0)
                        count++;
                    else
                        break;
                }
                else
                break;
        }
        printf("%ld\n",count);
    }
    return 0;
}

一道我觉得比较叼的斐波那契数了

标签:

原文地址:http://www.cnblogs.com/ACWQYYY/p/4322210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!