时间限制:500MS  内存限制:65536K
提交次数:270 通过次数:16

题型: 编程题   语言: C++;C

Description

给你如下Fibonacci 数的定义:
F1 = 1
F2 = 2
Fn = Fn-1 + Fn-2 (n >= 3)
给你两个数a与b,现要求你计算在a与b之间(包括a、b)有多少个Fibonacci 数

输入格式

有多行,每行有两个数a、b,使用空格分隔,a <= b <= 10^100(即最大10的100次方)
最后一行为两个0

输出格式

除了最后一行,其它每一行要求输出在a与b之间的Fibonacci 数的个数,一行一个

输入样例

10 100
1234567890 9876543210
0 0

输出样例

5
4

作者

admin

思路:这道题一早就盯着他了,但是一直以为自己不会做(a,b<=10^100) 被范围吓到了

后来在hdu 中做了一道题http://acm.hdu.edu.cn/showproblem.php?pid=1715,大概题意是给出n,求fb的第n项F(n), n的范围是<1000

前1000项的fb是很大的,有1、2百位,这只能用数组存了,那就可以用高精度加法,把前1000项的fb制成表;

而在这道题中,是给出a ,b  求a到b之间的fb个数,同上面的方法,先打一个前1000项的fb表(大数加法),然后 a,b在表中找位置(大数比较),那么他们之间的个数就是了

#include<cstdio>
#include<cstring>
char fb[][];//存储前1000项的fb
//高精度比较,返回1表示a>b 返回-1表示a=b 0表示a<b
int bcmp(char a[],char b[])
{
int i,n,m;
n=strlen(a);
m=strlen(b);
if(n>m) return ;//先比长度
else if(n<m) return ;
else//长度相同的时候再从高位开始逐一比较
{
for(i=; i<n; i++)
{
if(a[i]>b[i]) return ;
else if(a[i]<b[i]) return ;
else continue;
}
}
return -;//全部比较完毕,以上return未生效 就是 a=b
}
//高精度加法
void bplus(char a[],char b[],int t)
{
int c[],d[];
memset(c,,sizeof(c));
memset(d,,sizeof(d));
int n,m,i,j,k;
i=;
n=strlen(a);
m=strlen(b);
//字符数组转为整形数组 ,逆置存放
for(k=n-; k>=; k--)
c[i++]=a[k]-'';
j=;
for(k=m-; k>=; k--)
d[j++]=b[k]-''; k=n>m?n:m;
for(i=; i<=k; i++)
{
c[i+]+=(c[i]+d[i])/;
c[i]=(c[i]+d[i])%;
}
if(c[k+]) k=k+;
//将整形数组,转化为字符数组存在fb数组
j=;
for(i=k; i>=; i--)
fb[t][j++]=c[i]+'';
}
int main()
{
int i,j;
char s1[],s2[];
memset(fb,'\0',sizeof(fb));
fb[][]='';
fb[][]='';
//打表
for(i=; i<=; i++)
bplus(fb[i-],fb[i-],i); while(scanf("%s%s",s1,s2))
{
int cnt=;
if(!((s1[]-'')||(s2[]-''))) break;
for(i=; i<=; i++)
{
//查找a的位置 i
if(bcmp(fb[i],s1)==-)
{
cnt=;
i++;
break;
}
if(bcmp(fb[i],s1)>)
{
cnt=;
break;
}
}
for(j=i; j<=; j++)
if(bcmp(fb[j],s2)<=) cnt++;
else break;
printf("%d\n",cnt);
}
return ;
}

最新文章

  1. Maven使用archetype迅速生成项目骨架
  2. iOS7模拟器安装
  3. Advanced SQL
  4. Java为什么会引入及如何使用Unsafe
  5. No module named yum错误的解决办法
  6. PAT 基础编程题 4-11 求自定类型元素序列的中位数(希尔排序)
  7. Linux 中的零拷贝技术,第 1 部分
  8. nginx在windwos中的使用
  9. 《WPF程序设计指南》读书笔记——第4章 按钮与其他控件
  10. (转载)mysql_query( )返回值
  11. [Locked] Binary Tree Longest Consecutive Sequence
  12. Farming
  13. MySQL主键添加/删除
  14. Java 汉子转拼音
  15. Spring MVC NoClassDefFoundError 问题的解决方法。
  16. Java 8 Documentation Download
  17. 关于SELinux
  18. Windows Server 2016-图形化新建域用户(一)
  19. Action的模型绑定
  20. SVN 快速入门

热门文章

  1. 繁华模拟赛 Vincent的城堡
  2. PHP程序员,因该养成 7 个面向对象的好习惯
  3. iOS高级必备
  4. UIDatePicker的简单用法
  5. 通过IIS调试ASP.NET项目
  6. 大数据之ETL设计详解
  7. asp.net动态输出透明gif图片
  8. Python yield 使用浅析(转)
  9. 24.栈的push和pop序列[StackPushPopSequence]
  10. Android 阅读Tasks and Back Stack文章后的重点摘抄