EOJ2136 大整数

题目:

The good old fibonacci.

Time Limit:1000MS Memory Limit:65536KB
Total Submit:30 Accepted:10

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 therange [a,b].

Input

The input contains several test cases. Each test case consists of twonon-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 leadingzeros.

Output

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

Sample Input

10 100
1234567890 9876543210
0 0

Sample Output

5
4

题目分析:

     初看这题感觉数据量很大,没有思路,后来看了网上的分析才恍然大悟。其实这是可以仔细分析的。此数列是前两项的累加,所以是成比例增长的。10^100约=2^330;同理本数列只需计算出前一千项内应该可以大于10^100;可以通过大整数的加法,通过代码验证实际上第480项就超过100位了。然后只要通过二分查找就可以得出答案了,由于数据量不大也可以直接遍历。

 

总结:

         本题主要考察大整数的加法和大小比较,(二分查找非必须),真正弄明白了就不难了。

主要是要善于分析问题,不要被问题复杂的表面迷惑。同时在本题我还范了一个很低级的错误,习惯性意味数列第二项是1,其实本题是2,导致狂wa了无数次,以后审题要更仔细,避免惯性思维。

 

代码:

#include <iostream>

#include <cstdio>

#include <cstring>

#include <cmath>

#include <string>

#include <vector>

#include <map>

#include <algorithm>

 

using namespace std;

 

struct Num                         //大整数类,已经写过多次了。

{

   int num[1000]={};

    Num(){memset(num,0,sizeof(num));}

   Num(const string &s)

    {

       int k=0;

       int len=s.size();

       for(int i=len-1;i>=0;--i)

       {

           num[k++]=(s[i]-'0');

       }

    }

   void print()                          //输出大整数,主要用于测试。

    {

       int i;

       for(i=999;i>=0;--i)

       {

           if(num[i])

                break;

       }

       for(;i>=0;--i)

       {

           printf("%d",num[i]);

       }

       printf("\n");

    }

};

 

Num operator+(const Num &a,const Num &b)      //大整数的加法,通过运算符重载,写起来更//简洁。

{

   Num c;

   int i;

   for(i=0;i<1000;++i)

    {

       c.num[i]=a.num[i]+b.num[i];

    }

   for(i=0;i<999;++i)

    {

       c.num[i+1]+=c.num[i]/10;

       c.num[i]%=10;

    }

   return c;

}

 

int cmp(const Num &a,const Num &b)                                        //比较两个大整数的大小

{

   int i,len_a,len_b;

   for(i=999;i>=0;--i)

    {

       if(a.num[i])

           break;

    }

   len_a=i;

   for(i=999;i>=0;--i)

    {

       if(b.num[i])

           break;

    }

   len_b=i;

   if(len_a>len_b)

       return 1;

   else if(len_a<len_b)

       return -1;

   else

    {

       for(i=len_a;i>=0;--i)

       {

           if(a.num[i]>b.num[i])

                return 1;

           else if(a.num[i]<b.num[i])

                return -1;

       }

    }

   return 0;

}

 

 

int main()

{

   Num f[488];

   int i;

   f[1]={"1"};f[2]={"2"};

   for(i=3;i<488;++i)

       f[i]=f[i-1]+f[i-2];

   string a,b;

   while(cin>>a>>b,a!="0" || b!="0")

    {

       int l=0,r=0;

       Num x={a},y={b};

       for(i=1;i<488;++i)

       {

           if(cmp(f[i],x)>=0)

           {

                l=i;

                break;

           }

       }

       for(i=487;i>=1;--i)

       {

           if(cmp(f[i],y)<=0)

           {

                r=i;

                break;

           }

       }

       if(r>=l)

           cout<<r-l+1<<endl;

       else

           cout<<"0"<<endl;

    }

   return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
探索全栈前端技术的魅力:HTML+CSS+JS+JQ+Bootstrap网站源码深度解析 在这个数字化时代,构建一个既美观又功能强大的网站成为了许多开发者和企业追逐的目标。本份资源精心汇集了一套完整网站源码,融合了HTML的骨架搭建、CSS的视觉美化、JavaScript的交互逻辑、jQuery的高效操作以及Bootstrap的响应式设计,全方位揭秘了现代网页开发的精髓。 HTML,作为网页的基础,它构建了信息的框架;CSS则赋予网页生动的外观,让设计创意跃然屏上;JavaScript的加入,使网站拥有了灵动的交互体验;jQuery,作为JavaScript的强力辅助,简化了DOM操作与事件处理,让编码更为高效;而Bootstrap的融入,则确保了网站在不同设备上的完美呈现,响应式设计让访问无界限。 通过这份源码,你将: 学习如何高效组织HTML结构,提升页面加载速度与SEO友好度; 掌握CSS高级技巧,如Flexbox与Grid布局,打造适应各种屏幕的视觉盛宴; 理解JavaScript核心概念,动手实现动画、表单验证等动态效果; 利用jQuery插件快速增强用户体验,实现滑动效果、Ajax请求等; 深入Bootstrap框架,掌握移动优先的开发策略,响应式设计信手拈来。 无论是前端开发新手渴望系统学习,还是资深开发者寻求灵感与实用技巧,这份资源都是不可多得的宝藏。立即深入了解,开启你的全栈前端探索之旅,让每一个网页都成为技术与艺术的完美融合!
探索全栈前端技术的魅力:HTML+CSS+JS+JQ+Bootstrap网站源码深度解析 在这个数字化时代,构建一个既美观又功能强大的网站成为了许多开发者和企业追逐的目标。本份资源精心汇集了一套完整网站源码,融合了HTML的骨架搭建、CSS的视觉美化、JavaScript的交互逻辑、jQuery的高效操作以及Bootstrap的响应式设计,全方位揭秘了现代网页开发的精髓。 HTML,作为网页的基础,它构建了信息的框架;CSS则赋予网页生动的外观,让设计创意跃然屏上;JavaScript的加入,使网站拥有了灵动的交互体验;jQuery,作为JavaScript的强力辅助,简化了DOM操作与事件处理,让编码更为高效;而Bootstrap的融入,则确保了网站在不同设备上的完美呈现,响应式设计让访问无界限。 通过这份源码,你将: 学习如何高效组织HTML结构,提升页面加载速度与SEO友好度; 掌握CSS高级技巧,如Flexbox与Grid布局,打造适应各种屏幕的视觉盛宴; 理解JavaScript核心概念,动手实现动画、表单验证等动态效果; 利用jQuery插件快速增强用户体验,实现滑动效果、Ajax请求等; 深入Bootstrap框架,掌握移动优先的开发策略,响应式设计信手拈来。 无论是前端开发新手渴望系统学习,还是资深开发者寻求灵感与实用技巧,这份资源都是不可多得的宝藏。立即深入了解,开启你的全栈前端探索之旅,让每一个网页都成为技术与艺术的完美融合!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值