您的位置:首页 > 其它

hdu1316(How Many Fibs?)高精度

2014-07-21 17:26 337 查看
Problem Description

Recall the definition of the Fibonacci numbers: 

f1 := 1 

f2 := 2 

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

Given two numbers a and b, calculate how many Fibonacci numbers are in the range [a, b]. 

 

Input

The input contains several test cases. Each test case consists of two non-negative integer numbers a and b. Input is terminated by a = b = 0. Otherwise, a <= b <= 10^100. The numbers a and b are given with no superfluous leading zeros.

 

Output

For each test case output on a single line the number of Fibonacci numbers fi with a <= fi <= b. 

 

Sample Input

10 100
1234567890 9876543210
0 0

 

Sample Output

5
4求给定的区间范围内 有多少个斐波那契数列 打表得到长度100以内的所有斐波那契数 然后与左右端点进行比较即可
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 570;
const int len =150;
char fib
[len];
void Bigadd(char a[],char b[],char c[])
{
int n=strlen(a);
int m=strlen(b);
char temp;
int i,j,e,d;
for(i=0; i<m/2; i++)
{
temp=b[i];
b[i]=b[m-1-i];
b[m-1-i]=temp;
}
for(i=0; i<n/2; i++)
{
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
d=0;
e=0;
for(i=0;i<n&&i<m;i++)
{
d=a[i]-'0'+b[i]-'0'+e;
c[i]=d%10+'0';
e=d/10;
}
if(i==m)
{
for(;i<n;i++)
{
d=a[i]-'0'+e;
c[i]=d%10+'0';
e=d/10;
}
}
if(i==n)
{
for(;i<m;i++)
{
d=b[i]-'0'+e;
c[i]=d%10+'0';
e=d/10;
}
}
if(e)
c[i++]=e+'0';
int t=i;
for(i=0; i<t/2; i++)
{
temp=c[i];
c[i]=c[t-1-i];
c[t-1-i]=temp;
}
for(i=0; i<m/2; i++)
{
temp=b[i];
b[i]=b[m-1-i];
b[m-1-i]=temp;
}
for(i=0; i<n/2; i++)
{
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
}
int cmp(char a[],char b[])
{
int len1=strlen(a);
int len2=strlen(b);
if(len1==len2){
return strcmp(a,b);
}
else if(len1>len2)
return 1;
return -1;
}
void init()
{
fib[1][0]='1';
fib[2][0]='2';
for(int i=3;i<N;i++)
Bigadd(fib[i-1],fib[i-2],fib[i]);
}
int main()
{
char a[len],b[len];
init();
while(cin>>a>>b){
if(a[0]=='0'&&b[0]=='0')
break;
int cnt=0;
for(int i=1; i<N; i++)
{
if(cmp(fib[i],a)>=0&&cmp(fib[i],b)<=0)
cnt++;
}
cout<<cnt<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: