HDU1316:How Many Fibs?

來源:互聯網
上載者:User
Problem DescriptionRecall 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].  

InputThe 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. 

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

Sample Input

10 1001234567890 98765432100 0
 

Sample Output

54
 

 

//題意,在給定的範圍中有幾個斐波數,注意,提交的語言選G++,選C++會提示CE

 

#include<iostream>#include<cstring>#include<cstdio>using namespace std;string add(string s1,string s2){     if(s1.length()<s2.length())     {          string temp=s1;          s1=s2;          s2=temp;     }     for(int i=s1.length()-1,j=s2.length ()-1;i>=0;i--,j--)     {          s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));          if(s1[i]-'0'>=10)          {              s1[i]=char((s1[i]-'0')%10+'0');              if(i)                   s1[i-1]++;              else                   s1='1'+s1;          }     }     return s1;}string str[1005],a,b;int main(){    int i;    str[1] = "1";    str[2] = "2";    for(i = 3;i<1005;i++)    {        str[i] = add(str[i-2],str[i-1]);        //printf("%s\n",str[i]);    }    while(cin >> a >> b)    {        if(a=="0" && b == "0")        break;        int head,end,cnt = 0,len_a,len_b,len;        len_a = a.length();        len_b = b.length();        for(i = 1;i<1005;i++)        {            len = str[i].length();            if(len<len_a)            continue;            else if(len == len_a && str[i]>=a)            {                head = i;                break;            }            else if(len > len_a)            {                head = i;                break;            }        }        for(i = 1004;i>=1;i--)        {            len = str[i].length();            if(len>len_b)            continue;            else if(len == len_b && str[i]<=b)            {                end = i;                break;            }            else if(len < len_b)            {                end = i;                break;            }        }        printf("%d\n",end-head+1);    }    return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.