How Many Fibs?
来源:互联网 发布:java有没有链表 编辑:程序博客网 时间:2024/05/22 12:29
How Many Fibs?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1075 Accepted Submission(s): 454
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
大整数的加法,花了我两个小时,一定要小心仔细才行呀;
笨(本)人代码如下
#include<stdio.h>
#include<string.h>
int fib[510][120];//the first element is the array length
int a[120],b[120];
void change(int *x)//right
{
int i,temp,len;
len=x[0];
for(i=1;i<=len/2;i++)
{
temp=x[i];x[i]=x[len+1-i];x[len+1-i]=temp;
}
}
void countfib()// right
{
int k,i,len1,len2,len,carry;
memset(fib,0,sizeof(fib));
fib[1][0]=fib[2][0]=1;
fib[1][1]=1;fib[2][1]=2;
for(k=3;k<510;k++)//compute the fib ,is the most important and most difficult of there
{
len1=fib[k-2][0];len2=fib[k-1][0];
len=len1>len2?len1:len2;
carry=0;
change(fib[k-2]);
change(fib[k-1]);
for(i=1;i<=len+1;i++)
{
fib[k][i]=fib[k-2][i]+fib[k-1][i]+carry;
if(fib[k][i]>=10)
{
fib[k][i]-=10;
carry=1;
}
else
carry=0;
}
if(fib[k][len+1]==0)
fib[k][0]=len;
else
fib[k][0]=len+1;
change(fib[k]);
change(fib[k-1]);
change(fib[k-2]);
}
}
int compare(int *x,int *y)//x>y 0, x==y 2, x<y 1 right
{
int len1,len2,i;
len1=x[0];len2=y[0];
if(len1>len2)
return 0;
else if(len1<len2)
return 1;
else
{
for(i=1;i<=len1;i++)
{
if(x[i]>y[i])
return 0;
else if(x[i]<y[i])
return 1;
}
return 2;
}
}
int main()
{
int i,j,flag,count;
int start,end;
char s1[120],s2[120];
countfib();
while(1)
{
scanf("%s",s1);
scanf("%s",s2);
if(s1[0]=='0' && s2[0]=='0')
break;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0;s1[i];i++)
a[i+1]=s1[i]-'0';
a[0]=i;
for(i=0;s2[i];i++)
b[i+1]=s2[i]-'0';
b[0]=i;
count=0;
for(i=1;;i++)
{
flag=compare(a,fib[i]);
if(flag>0)
{ start=i;break;}
}
for(i=1;;i++)
{
flag=compare(b,fib[i]);
if(flag==1)
{ end=i-1;break;}
else if(flag==2)
{ end=i;break;}
}
count=end-start+1;
printf("%d/n",count);
/* printf("start=%d end=%d count=%d/n",start,end,count);
for(i=start;i<=end;i++)
{
for(j=1;j<=fib[i][0];j++)
printf("%d",fib[i][j]);
printf("/n");
}*/
}
return 0;
}
- How many fibs
- PKU2413 how many fibs
- How Many Fibs?
- UVa10183 - How Many Fibs?
- HDU1316:How Many Fibs?
- hdu1316 How Many Fibs?
- How many Fibs
- 110601 How many Fibs
- How many Fibs?
- hdu1316 How Many Fibs?
- How Many Fibs? (大数)
- How Many Fibs?
- hdu1316 How Many Fibs?
- How many Fibs?(java)
- hdu1316 How Many Fibs?
- How Many Fibs? HDU
- POJ 2413 How many Fibs? /HDOJ 1316 How Many Fibs?
- HDU 1316 How Many Fibs?
- linux vm balance 翻译
- vs2008 MSChart图表使用
- 时间格式 年月日时分秒毫秒
- "CLR Via C#" -- Read Note Part 01
- 搭建基于xwiki的知识管理平台
- How Many Fibs?
- oracle的rank,over partition 使用
- VirtualBox环境下基于多台ubuntu虚拟机的Hadoop分布式计算环境搭建
- 存储过程 游标
- Python与网页相关的操作集锦
- 怎么根据linux c/c++ 开发的d-bus服务生成java 的调用接口文件
- shunlian
- datagridview 分页查询
- 一种求和的创新思维的应用