您的位置:首页 > 其它

来简单地数个数(斐波那契额数列)

2017-06-11 15:12 204 查看
题目描述

这是一个斐波那契数列:

f1 = 1

f2 = 2

fn = fn-1 + fn-2 (n>=3)

蔡老板想知道,给你两个数a、b,你能否求出在区间[a,b]里有多少个斐波那契数。

输入

多组数据输入。一行为一组输入数据,包括两个非负整数a、b(a <= b <= 10^100),当a=b=0时输入终止。

输出

对每组输入,输出单独一行,包含一个整数表示区间[a,b]里的斐波那契数个数。

样例输入

10 100

1234567890 9876543210

0 0

样例输出

5

4

提示

[提交][状态][讨论版]

注意数据量很大哦!!!十的一百次方呢。。。。

#include<bits/stdc++.h>
const int n = 500;
using namespace std;
int a[111]= {0};
int b[111]= {0};
int c[111]= {0};
int d[111];
char s
[111];
void js()
{
memset(b,0,sizeof(b));
memset(a,0,sizeof(a));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
int len = 0;
a[1] = 1;
b[1] = 2;
for(int k=1; k<=n; k++)
{
if(k<=2)
{
if(k==1)
c[1] = 1;
else if(k==2)
c[1] = 2 ;
}
else
{
for(int i = 1;i<=110;i++)
{
d[i] = b[i];
b[i] += a[i];
}
for(int i = 1;i<=110;i++)
{
if(b[i]>=10)
{
b[i]-=10;
b[i+1]++;
}
c[i] = b[i];
a[i] = d[i];
}
}
int i=110;
int l = 0;
while(c[i]==0) i--;
for(i=i; i>=1; i--)
{
s[len][l++] = c[i] + '0';
}
s[len][l] = '\0';
len++;
}
}
int main()
{
js();
char x[101],y[101];
while(~scanf("%s %s",x,y))
{
if(strcmp(x,"0")==0&&strcmp(y,"0")==0)
break;
getchar();
int sum = 0;
for(int i = 0; i<n; i++)
{
int len = strlen(s[i]);
//cout<<s[i]<<endl;
//printf("%d\n",len);
int len1 = strlen(x);
int len2 = strlen(y);
if(len>len1&&len<len2)
{
sum++;
//cout<<s[i]<<endl;
}
else if(len==len1&&strcmp(s[i],x)>=0&&((strcmp(s[i],y)<=0&&len==len2)||len<len2))
{
sum++;
//cout<<s[i]<<endl;
}
else if(len==len2&&strcmp(s[i],y)<=0&&(strcmp(s[i],x)>=0&&len==len1||len>len1))
{
sum++;
//cout<<s[i]<<endl;
}
}
cout<<sum<<endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  斐波那契额数列