1143 多少个Fibonacci数

             1143 多少个Fibonacci数

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

           题型: 编程题   语言: G++;GCC

 

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

  这题刚开始做时懵逼了好久,后来别人提示了下才会做。。。各种坑。。。(代码注释里讲解解题步骤)

  1 /*#include <cstdio>
  2 #include <cstring>
  3 #define N 1000
  4 
  5 using namespace std;
  6 char f[N+5][N];
  7 //
  8 //高精度加法
  9 void big_plus(char a[],char b[],int t)
 10 {
 11     int c[N],d[N];
 12     memset(c,0,sizeof(c));memset(d,0,sizeof(d));//数组全部清0。
 13     int len_a,len_b,i,j,k;
 14     //
 15     i=1;
 16     len_a=strlen(a);len_b=strlen(b);
 17     //
 18     //将字符数组转为整型数组,逆方向。
 19     for(k=len_a-1;k>=0;k--)
 20         c[i++]=a[k]-'0';
 21     j=1;
 22     for(k=len_b-1;k>=0;k--)
 23         d[j++]=b[k]-'0';
 24     //
 25     k=len_a>len_b?len_a:len_b;
 26     for(i=1;i<=k;i++)//将每一位相加,满十进位。
 27     {
 28         c[i+1]+=(c[i]+d[i])/10;
 29         c[i]=(c[i]+d[i])%10;
 30     }
 31     //
 32     if(c[k+1]) //判断最高位是否有进位
 33         k=k+1;
 34     j=0;
 35     for(i=k;i>=1;i--) //将整型数组转变为字符数组存到f数组里。
 36         f[t][j++]=c[i]+'0';
 37 }
 38 //
 39 
 40 int big_cmp(char a[],char b[])//高精度 数字比较。a>b返回1,a=b返回0,a<b返回-1。
 41 {
 42     int i,len_a,len_b;
 43     len_a=strlen(a);
 44     len_b=strlen(b);
 45     //
 46     if(len_a>len_b)
 47         return 1;
 48     else if(len_a<len_b)
 49         return 0;
 50     else
 51     {
 52         for(i=0;i<len_a;i++)
 53         {
 54             if(a[i]>b[i])
 55                 return 1;
 56             else if(a[i]<b[i])
 57                 return 0;
 58             else continue;
 59         }
 60     }
 61     return -1; //上面的return均未执行,则说明a==b。
 62 }
 63 int main()
 64 {
 65     int i,j;
 66     char f1[N],f2[N];
 67     memset(f,'\0',sizeof(f));
 68     f[1][0]='1'; f[2][0]='2';
 69     //
 70     //下面循环累加,打表法。
 71     for(i=3;i<=N;i++)
 72     {
 73         big_plus(f[i-2],f[i-1],i);
 74     }
 75     //
 76     while(scanf("%s%s",f1,f2))
 77     {
 78         int cnt=0;
 79         if((f1[0]-'0')==0||(f2[0]-'0')==0)
 80             break;
 81         //
 82         for(i=1;i<=N;i++)//这个循环用来找f1的位置
 83         {
 84             if(big_cmp(f[i],f1)==-1)
 85             {
 86                 cnt=1;
 87                 i++;
 88                 break;
 89             }
 90             if(big_cmp(f[i],f1)>0)
 91             {
 92                 cnt=0;
 93                 break;
 94             }
 95         }
 96         for(j=i;j<=N;j++)//这个循环用来找f2的位置
 97         {
 98             if(big_cmp(f[j],f2)<=0)
 99                 ++cnt;
100             else
101                 break;
102         }
103         //
104         printf("%d\n",cnt);
105     }
106 
107 
108     return 0;
109 }
110 */
111 
112 #include<cstdio>
113 #include<cstring>
114 #define N 1000
115 char fb[N+5][N];//存储前1000项的fb
116 //高精度数比较 返回1表示a>b  返回-1表示a=b   0表示a<b
117 int big_cmp(char a[],char b[])
118 {
119     int i,len_a,len_b;
120     len_a=strlen(a);
121     len_b=strlen(b);
122     if(len_a>len_b) return 1;//先比长度
123     else if(len_a<len_b) return 0;
124     else//长度相同的时候再从高位开始逐一比较
125     {
126         for(i=0; i<len_a; i++)
127         {
128             if(a[i]>b[i]) return 1;
129             else if(a[i]<b[i]) return 0;
130             else continue;
131         }
132     }
133     return -1;//全部比较完毕,以上return未生效      就是 a=b
134 }
135 //高精度加法
136 void big_plus(char a[],char b[],int t)
137 {
138     int c[N],d[N];
139     memset(c,0,sizeof(c));  //数组全部清0。
140     memset(d,0,sizeof(d));
141     int len_a,len_b,i,j,k;
142     i=1;
143     len_a=strlen(a);
144     len_b=strlen(b);
145     //字符数组转为整形数组 ,逆置存放
146     for(k=len_a-1; k>=0; k--)
147         c[i++]=a[k]-'0';
148     j=1;
149     for(k=len_b-1; k>=0; k--)
150         d[j++]=b[k]-'0';
151 
152     k=len_a>len_b?len_a:len_b;
153     for(i=1; i<=k; i++)   //将每一位相加,满十进位。
154     {
155         c[i+1]+=(c[i]+d[i])/10;
156         c[i]=(c[i]+d[i])%10;
157     }
158     if(c[k+1]) k=k+1; //判断最高位是否有进位
159 
160     j=0;
161     for(i=k; i>=1; i--)   //将整形数组,转化为字符数组存在fb数组
162         fb[t][j++]=c[i]+'0';
163 }
164 int main()
165 {
166     int i,j;
167     char s1[N],s2[N];
168     memset(fb,'\0',sizeof(fb));
169     fb[1][0]='1';
170     fb[2][0]='2';
171     //下面循环累加,打表法。
172     for(i=3; i<=N; i++)
173         big_plus(fb[i-2],fb[i-1],i);
174 
175     while(scanf("%s%s",s1,s2))
176     {
177         int cnt=0;
178         if(!((s1[0]-'0')||(s2[0]-'0'))) break;
179         for(i=1; i<=N; i++)
180         {
181             //查找a的位置 i
182             if(big_cmp(fb[i],s1)==-1)
183             {
184                 cnt=1;
185                 i++;
186                 break;
187             }
188             if(big_cmp(fb[i],s1)>0)
189             {
190                 cnt=0;
191                 break;
192             }
193         }
194         for(j=i; j<=N; j++)
195             if(big_cmp(fb[j],s2)<=0) cnt++;
196             else break;
197         printf("%d\n",cnt);
198     }
199     return 0;
200 }

 

转载于:https://www.cnblogs.com/geek1116/p/5213292.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这些重大科技领域问题,听听专家怎么说

来源&#xff1a;科技日报从前不久结束的全英华人教授协会年会上了解到&#xff0c;目前人类面临的许多问题都可以通过扎实的科研创新和精准的技术应用予以解决&#xff1b;新的技术领域的出现&#xff0c;不代表传统技术方法都要丢弃&#xff1b;尽管摆在广大科技从业者面前的…

plt.fill_between用法

plt.fill_between用颜色填充两条曲线之间的区域plt.fill_between(x, y1, y2)&#xff0c;其中x是横坐标&#xff0c;y1和y2是两条曲线&#xff0c;这个函数的作用是用颜色填充y1和y2这两条曲线之间的区域。 该函数最常用的用法是已知均值曲线和标准差&#xff0c;画出标准差覆…

QT+OpenCV综合示例:载入、读取图片

QTOpenCV综合示例&#xff1a;载入、读取图片1、代码&#xff1a;2、运行结果&#xff1a;下载1 GitHub: 下载2 1、代码&#xff1a; 1&#xff09;opencv_imwrite_Q.pro 添加&#xff1a; INCLUDEPATH D:\opencv-3.1.0\opencv\build\includewin32:CONFIG(release, debug|re…

swift inheritace 继承

class Base {var base_x 0static var base_y 1final var base_z 12func baseInc() {base_x 1}class func baseMuti() {base_y - 1} }class Parent {func parentInc() {print("parnetInc")} }class Child: Base {//属性也加overrideoverride var base_x: Int {wi…

“算法战:DARPA下一代人工智能计划初见成效” 背景分析与初步研判

2018年9月&#xff0c;美国国防高级研究计划局&#xff08;DARPA&#xff09;宣布将出资20亿美元,用于开发新的人工智能技术。近日&#xff0c;DARPA副局长彼得海纳姆在华盛顿接受记者采访时说&#xff0c;DARPA的“下一代人工智能”&#xff08;AI Next&#xff09;计划在实施…

python画PR曲线(precision-recall曲线)

使用python画precision-recall曲线的代码是&#xff1a; sklearn.metrics.precision_recall_curve(y_true, probas_pred, pos_labelNone, sample_weightNone) 以上代码会根据预测值和真实值&#xff0c;并通过改变判定阈值来计算一条precision-recall典线。 注意&#xff1a…

OpenCV学习笔记(十一):阈值化:threshold(),adaptivethreshold()

OpenCV学习笔记&#xff08;十一&#xff09;&#xff1a;阈值化&#xff1a;threshold(),adaptivethreshold() 一、定义&#xff1a; 1&#xff09;固定阈值操作 double threshold( InputArray src, // 输入图像&#xff0c;单通道 OutputArray dst, // 输出图像 double…

北京邮电大学刘伟教授:人机融合与混合智能的新应用场景

前言&#xff1a;本文是北京邮电大学人机交互与认知工程实验室主任、科技委人机融合智能组首席科学家刘伟教授就混合智能的产生、起源和新应用场景所做的深度阐述。第一部分是刘伟老师从新书《崛起的超级智能&#xff1a;互联网大脑如何影响科技未来》延伸的关于人机融合的思考…

VC++6.0怎么打开工程

点击文件→打开&#xff0c;选择工程所在文件夹&#xff0c;选择后缀名为dsp的文件打开即可。 若直接选择cpp后缀名打开&#xff0c;打开的只是cpp文件&#xff0c;而不是工程&#xff0c;此时VC右侧不会显示工程信息。

问题解决:QtCreator屏蔽指定警告:如C4819等

QT creator 频繁报出 &#xff0c;不好解决的错误如&#xff1a; warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 方法一&#xff1a;&#xff08;屏蔽此警告&#xff09; 在工程文件.pro里面添加 # disable C…

解析|2G~5G与未来天线技术!

来源&#xff1a;电子万花筒过去二十年&#xff0c;我们见证了移动通信从1G到4G LTE的转变。在这期间&#xff0c;通信的关键技术在发生变化&#xff0c;处理的信息量成倍增长。而天线&#xff0c;是实现这一跨越式提升不可或缺的组件。按照业界的定义&#xff0c;天线是一种变…

DB2 错误代码 命令大全

SQLSTATE 消息 本节列示 SQLSTATE 及其含义。SQLSTATE 是按类代码进行分组的&#xff1b;对于子代码&#xff0c;请参阅相应的表。 表 2. SQLSTATE 类代码 类 代码 含义 要获得子代码&#xff0c; 参阅... 00 完全成功完成 表 3 01 警告 表 4 02 无数据 表 5 07 动态 …

C++查看各种数据类型所占字节和最大最小值(数据范围)

#include<iostream> using namespace std; int main() { cout << "bool: \t\t" << "所占字节数&#xff1a;" << sizeof(bool); cout << "\t最大值&#xff1a;" << (numeric_limits<bool>::ma…

QT+OpenCV综合示例:图像混合(滑动条)

QTOpenCV综合示例&#xff1a;图像混合&#xff08;滑动条&#xff09;1、代码&#xff1a;2、运行结果&#xff1a;0&#xff09;Widget_op.ui &#xff08;界面文件&#xff09;设计&#xff1a; 1、代码&#xff1a; 1&#xff09;opencv_imwrite_Q.pro 添加&#xff1a;…

软件或jar包等名字里的GA意思

首页 > 转贴的文章 > 软件的版本"GA"代表什么意思?如MyEclipse 5.0 GA 软件的版本"GA"代表什么意思?如MyEclipse 5.0 GA 经常看到软件版本里有GA的&#xff0c;如MyEclipse 5.0 GA&#xff0c;iBATIS for Java 2.2.0 Released [Status: Beta - Vot…

图说报告|智能技术群的“核聚变”推动智能+时代到来

来源&#xff1a;阿里研究院2019年政府工作报告正式提出了“智能”重要战略。5G、物联网、人工智能、数字孪生、云计算、边缘计算等智能技术群的融合与叠加就像“核聚变”&#xff0c;推动着万物互联迈向万物智能时代&#xff0c;进而带动了“智能”时代的到来&#xff0c;以智…

C++局部变量和全局变量的初始化

当局部变量被定义时&#xff0c;系统不会对其初始化&#xff0c;此时局部变量的初始值未定义&#xff0c;必须自行对其初始化。定义全局变量时&#xff0c;系统会自动初始化为下列值&#xff1a;

OpenCV学习笔记(十二):边缘检测:Canny(),Sobel(),Laplace(),Scharr滤波器

OpenCV学习笔记&#xff08;十二&#xff09;&#xff1a;边缘检测&#xff1a;Canny(),Sobel(),Laplace(),Scharr滤波器 1&#xff09;滤波&#xff1a;边缘检测的算法主要是基于图像强度的一阶和二阶导数&#xff0c;但导数通常对噪声很敏感&#xff0c;因此必须采用滤波器来…

C++全局变量和局部变量名称可以相同

C的局部变量和全局变量的名称可以相同&#xff0c;但是在函数内&#xff0c;局部变量的值会覆盖全局变量的值。下面是一个实例&#xff1a; #include <iostream> using namespace std;// 全局变量声明 int g 20;int main () {// 局部变量声明int g 10;cout << g…

微软转型里程碑:云计算收入首次超过Windows业务

来源&#xff1a;腾讯科技导语 微软云计算业务第二季度收入为114亿美元&#xff0c;实现了64%的营收增长&#xff0c;上年同期和上一季度的增幅分别为89%和73%。腾讯科技讯 据国外媒体报道&#xff0c;微软公司今日公布了二季度财报&#xff08;自然季度&#xff0c;下同&#…