码迷,mamicode.com
首页 > 其他好文 > 详细

杭电1316

时间:2014-05-26 15:11:13      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:des   style   c   class   java   ext   


How Many Fibs?

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3804    Accepted Submission(s): 1498 

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
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
using namespace std;
const int maxn=500;
const int base=1000000;
const int INF=99999999;
const int MIN=-INF;
char a[maxn][500];
char* add(char*a,char*b)//大数加法
{
    int lena=strlen(a);
    int lenb=strlen(b);
    int i,j,k;
    char c[500];
    if(lena<lenb)
    {
        strcpy(c,a);
        strcpy(a,b);
        strcpy(b,c);
    }
    int A[500]= {0},B[500]= {0};
    for(j=0,i=lena-1; i>=0; i--,j++)
        A[j]=a[i]-‘0‘;
    int lenA=j;
    for(i=lenb-1,j=0; i>=0; i--,j++)
        B[j]=b[i]-‘0‘;
    int lenB=j;
    for(i=0; i<lenB; i++)
        A[i]+=B[i];
    for(i=0; i<500; i++)
    {
        if(A[i]>9)
        {
            A[i+1]+=A[i]/10;
            A[i]%=10;
        }
    }
    for(i=500-1; i>=0; i--)if(A[i]!=0)break;
    for(j=0; i>=0; i--)
        c[j++]=A[i]+‘0‘;
    c[j]=‘\0‘;
    return c;
}
int comper(char*a,char*b)//自定义比较函数 相同是0 大于是1 小于是-1
{
    int lena=strlen(a);
    int lenb=strlen(b);
    if(lena>lenb)
        return 1;
    else if(lena<lenb)
        return -1;
    else if(lena==lenb)
    {
        for(int i=0; i<lena; i++)
            if(a[i]<b[i])
                return -1;
            else if(a[i]>b[i])
                return 1;
    }
    return 0;


}
int main()
{
    int n,m,i,j,k,t;
    a[1][0]=‘1‘;
    a[2][0]=‘2‘;
    for(i=3; i<=maxn; i++)
    {
        strcpy(a[i],add(a[i-1],a[i-2]));
    }
    //for(i=1;i<50;i++)
    //  cout<<a[i]<<endl;

    char a1[maxn],b1[maxn];
    while(cin>>a1>>b1)
    {
        int lena1=strlen(a1);
        int lenb1=strlen(b1);
        if(lena1==1&&lenb1==1&&a1[0]==‘0‘&&b1[0]==‘0‘)return 0;
        int cnt=0;
        for(i=1; i<maxn; i++)
        {
            if(comper(a[i],a1)>=0&&comper(a[i],b1)<=0)
                cnt++;
        }
        cout<<cnt<<endl;
    }

    return 0;
}

杭电1316,布布扣,bubuko.com

杭电1316

标签:des   style   c   class   java   ext   

原文地址:http://www.cnblogs.com/a666999/p/3746365.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!