//  大数继续

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
 
Source
 

/**********************

高精度斐波数,依然用高精度的加法模板打表,打到520多就够了,

主要是判断数的大小,这里是比较额字符串形式的数的大小。

***********************/

Code:

#include<iostream>
#include <stdio.h>
#include<string>
using namespace std;
string add(string x,string y)
{
string ans ;
int lenx = x.length();
int leny = y.length();
if(lenx<leny)
{
for(int i = 1;i<=leny-lenx;i++)
x = "0"+x;
}
else
{
for(int i = 1;i<=lenx-leny;i++)
y = "0"+y;
}
lenx = x.length();
int cf = 0;
int temp;
for(int i = lenx-1;i>=0;i--)
{
temp = x[i] - '0' + y[i] - '0'+cf;
cf = temp/10;
temp%=10;
ans = char('0'+temp)+ans;
}
if(cf!=0)
ans = char(cf+'0')+ans;
return ans;
}
int compare(string x,string y)// 字符串形式的数的比较大小
{
int i,lenx = x.length(),leny = y.length(),leaf;
if(x==y) return 0;// 0 表示 x == y
if(x.length()>y.length()) return 1;// 返回1 表示 x > y
if(x.length()<y.length()) return -1;// -1 表示 x < y
if(x.length()==y.length())
{
for(i = 0;i<lenx;i++)
{
if(x[i]==y[i]) continue;
if(x[i]>y[i]) return 1;
else return -1;
}
return 0;
}
return leaf;
}
int main()
{
int i,j,k,start,eend;
string x,y,num[1005];;
num[0] = "0";
num[1] = "1";
num[2] = "2";
for(int i = 3;i<=1000;i++)
num[i] = add(num[i-1],num[i-2]);
while(cin>>x>>y&&x!="0"||y!="0")// x y 均为 0 的时候才结束程序
{
if(y == "0")// y == 0 时 直接输出 0
{
printf("0");
continue;
}
start = eend = 0;
/**
j = k = 0;
while(x[j]=='0')// 受到
j++;
x = x.substr(j,x.length()-j);// 受到 hdu 1753 的影响,以为会有前导0,其实没有 while(y[k]=='0')
k++;
y = y.substr(k,y.length()-k);
**/
for(i = 1;i<1000;i++)
{
if(compare(x,num[i])==0)
{
start = i;
break;
}
else if(compare(num[i],x)==-1&&compare(num[i+1],x)==1)
{
start = i+1;
break;
}
}
for(i = 1;i<1000;i++)
{
if(compare(y,num[i])==0){
eend = i;break;
}
else if(compare(num[i],y)==-1&&compare(num[i+1],y)==1){
eend = i;break;
}
}
if(x=="0") // 注意 x == 0 时的情况
start = 1;
//cout<<start<<" "<<eend<<endl;;
cout<<eend-start+1<<endl;
}
}

hdu 1316 How many Fibs?(高精度斐波那契数)的更多相关文章

  1. HDU 5914 Triangle(打表——斐波那契数的应用)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Problem Description Mr. Frog has n sticks, whos ...

  2. hdu 4983 线段树+斐波那契数

    http://acm.hdu.edu.cn/showproblem.php?pid=4893 三种操作: 1 k d, 修改k的为值增加d 2 l r, 查询l到r的区间和 3 l r, 从l到r区间 ...

  3. HDU.2516 取石子游戏 (博弈论 斐波那契博弈)

    HDU.2516 取石子游戏 (博弈论 斐波那契博弈) 题意分析 简单的斐波那契博弈 博弈论快速入门 代码总览 #include <bits/stdc++.h> #define nmax ...

  4. HDU 2516 取石子游戏(斐波那契博弈)

    取石子游戏 Time Limit: 2000/1000 MS(Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  5. HDU 5620 KK's Steel (斐波那契序列)

    KK's Steel 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/J Description Our lovely KK ha ...

  6. hdu 2516 取石子游戏 (斐波那契博弈)

    题意:1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍. 取完者胜,先取者负输出"Second win",先取者胜 ...

  7. HDU 1021(斐波那契数与因子3 **)

    题意是说在给定的一种满足每一项等于前两项之和的数列中,判断第 n 项的数字是否为 3 的倍数. 斐波那契数在到第四十多位的时候就会超出 int 存储范围,但是题目问的是是否为 3 的倍数,也就是模 3 ...

  8. hdu1316(大数的斐波那契数)

    题目信息:求两个大数之间的斐波那契数的个数(C++/JAVA) pid=1316">http://acm.hdu.edu.cn/showproblem.php? pid=1316 这里 ...

  9. hdu1568&&hdu3117 求斐波那契数前四位和后四位

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568 题意:如标题所示,求斐波那契数前四位,不足四位直接输出答案 斐波那契数列通式: 当n<=2 ...

随机推荐

  1. cocos2d-x RenderTexture

    转自:http://blog.csdn.net/bill_man/article/details/7250911 1.CCRenderTexture 使用CCRenderTexture的过程总结起来一 ...

  2. 5.6 在线DDL (online DDL)详解

    ONLINE ddl 原理: online ddl相关参数 测试原表数据是否能进行ONLINE DDL方法: online DDL 局限性 测试

  3. C#_dropdownlist_1

    关于ASP.net MVC 中DropDownList绑定与提交数据   在做 ASP.net MVC项目中,数据绑定也是很关键的,现在以个人经验与大家交流下 ASP.net MVC 中DropDow ...

  4. swift 如何使用OC中宏的功能

    swift中没有宏的概念,那么我们在swift使用宏的功能来提高效率呢? 一.使用关键字 let 来声明一个常量 存储相应的值,以下代码声明了常量  myColor 来存储一种指定的颜色 let my ...

  5. lambda expand in list

    [(lambda x: x*x)(x) for x in range(10)] Or better yet: [x*x for x in range(10)]

  6. GitHub帮助文档翻译2——contribution

    工欲善其事必先利其器 ,都不知道 GitHub到底是什么,还怎么玩?因为总是会读了第一句就忘了下一句,形成不了感觉,所以希望把读GitHub的帮助文档都翻译出来,总是看大段大段的东西,谁都会懵圈的.希 ...

  7. js解析XML

    //在当前页面内追加换行标签和指定的HTML内容function w( html ){    $(document.body).append("<br/>" + htm ...

  8. fedora 23中配置tftp-server

    fedora 23中配置tftp-server */--> fedora 23中配置tftp-server Table of Contents 1. 简介 2. tftp安装 3. 启动和允许 ...

  9. 关于Hibernate的总结

    主键的生成策略: * increment      :是由Hibernate完成的自动增长.(不是数据库底层的自动增长的方式.) * select  max(id) from  customer * ...

  10. Matlb中break 和continue 语句

    有两个附加语句可以控制while 和for 循环:break 和continue 语句. break 语句可以中止循环的执行和跳到end 后面的第一句执行,而continue 只中止本次循环,然后返回 ...