题目信息:求两个大数之间的斐波那契数的个数(C++/JAVA)

pid=1316">http://acm.hdu.edu.cn/showproblem.php?

pid=1316

这里给出java代码和c++代码

C++:AC代码

#include<iostream>

#include<string>

using namespace std;

string add(string s1,string s2){//字符串模拟大数加法

    string s;

    int len1,len2;

    len1=s1.size()-1; len2=s2.size()-1;

    int i=0,flag=0;

    while(len1>-1&&len2>-1){

        int sum=flag+(s1[len1--]-'0')+(s2[len2--]-'0');

        s+=char ((sum)%10+'0');

        flag=sum/10;

    }

    while(len1>-1){

        int sum=flag+(s1[len1--]-'0');

        s+=char ((sum)%10+'0');

        flag=sum/10;

    }

    while(len2>-1){

        int sum=flag+(s2[len2--]-'0');

        s+=char ((sum)%10+'0');

        flag=sum/10;

    }

    if(flag) s+=char ('0'+flag);

    //cout<<s<<endl;

    for(int i=0;i<s.size()/2;i++){

        char c=s[i];

        s[i]=s[s.size()-i-1];

        s[s.size()-i-1]=c;

    }

    return s;

}

int compareto(string s,string s1){//模拟大数(字符串)比較



    int j,i,len=s.size(),len1=s1.size();

    for(i=0;s[i]=='0';i++);//去掉前导0

    for(j=0;s1[j]=='0';j++);//去掉前导0

    if(len-i>len1-j) return 1;

    else if(len-i<len1-j) return -1;

    else for(;s[i]==s1[j]&&i<len;i++,j++);

    if(s[i]>s1[j]) return 1;//s>s1

    if(s[i]<s1[j]) return -1;//s<s1

    return 0;

}

string s[501];

int main()

{

    string a,b;

    s[1]="1"; s[2]="2";

    for(int i=3;i<=500;i++){

        s[i]=add(s[i-1],s[i-2]);

        //if(i<10) cout<<s[i]<<endl;

    }

    while(cin>>a>>b){

        if(a=="0"&&b=="0") break;

        //cout<<compareto(a,b)<<endl;

        int sum=0;

        for(int i=1;i<=500;i++){

            if(compareto(s[i],a)>=0&&compareto(s[i],b)<=0){

                sum++;

            }

        }

        cout<<sum<<endl;

    }



    return 0;

}



java代码:

import java.math.BigInteger;

import java.util.Scanner;



public class Main {



    public static void main(String[] args) {

        BigInteger a,b;

        BigInteger s[] = new BigInteger[1501];

        s[0]=BigInteger.ZERO;

        s[1]=BigInteger.ONE;

        s[2]=BigInteger.valueOf(2);

        for(int i=3;i<=1500;i++){

            s[i]=s[i-1].add(s[i-2]);

        }

        //System.out.println(s[1500]);

        Scanner sc = new Scanner(System.in);

        while(sc.hasNext()){

            a=sc.nextBigInteger();

            b=sc.nextBigInteger();

            if(a.add(b).compareTo(BigInteger.ZERO)==0) break;

            int cnt=0;

            //提高程序的鲁棒性

            if(a.compareTo(b)>0){

                BigInteger tmp=a;

                a=b;

                b=tmp;

            }

            for(int i=1;i<=1500;i++){

                if(s[i].compareTo(a)>=0&&s[i].compareTo(b)<=0){

                    cnt++;

                }

            }

            System.out.println(cnt);

        }



    }

}

hdu1316(大数的斐波那契数)的更多相关文章

  1. HDU1316(求区间斐波那契数的个数)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1316 题意:给两个数a和b,其中它们可能很大,最大到10^100,然后求去区间[a,b]内有多少个fib数 ...

  2. UVA 11582 Colossal Fibonacci Numbers! 大斐波那契数

    大致题意:输入两个非负整数a,b和正整数n.计算f(a^b)%n.其中f[0]=f[1]=1, f[i+2]=f[i+1]+f[i]. 即计算大斐波那契数再取模. 一开始看到大斐波那契数,就想到了矩阵 ...

  3. 斐波那契数[XDU1049]

    Problem 1049 - 斐波那契数 Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty: Total Submit: 1673  Ac ...

  4. C++求斐波那契数

    题目内容:斐波那契数定义为:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>1且n为整数) 如果写出菲氏数列,则应该是: 0 1 1 2 3 5 8 13 21 34 …… ...

  5. Project Euler 104:Pandigital Fibonacci ends 两端为全数字的斐波那契数

    Pandigital Fibonacci ends The Fibonacci sequence is defined by the recurrence relation: F[n] = F[n-1 ...

  6. DP:斐波纳契数

    题目:输出第 n 个斐波纳契数(Fibonacci) 方法一.简单递归 这个就不说了,小n怡情,大n伤身啊……当n=40的时候,就明显感觉到卡了,不是一般的慢. //输出第n个 Fibonacci 数 ...

  7. HDU4549 M斐波那契数

    M斐波那契数列 题目分析: M斐波那契数列F[n]是一种整数数列,它的定义例如以下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 如今给 ...

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

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

  9. [Swift]LeetCode509. 斐波那契数 | Fibonacci Number

    The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...

随机推荐

  1. 汇编程序44:检测点13.1 (jmp near ptr 标号指令的中断例程)

    安装程序: assume cs:code //jmp near ptr 标号指令的替代实现,使用iret指令 code segment start: mov ax,cs mov ds,ax mov s ...

  2. 【POJ1845】Sumdiv(数论/约数和定理/等比数列二分求和)

    题目: POJ1845 分析: 首先用线性筛把\(A\)分解质因数,得到: \[A=p_1^{a_1}*p_2^{a_2}...*p_n^{a_n} (p_i是质数且a_i>0) \] 则显然\ ...

  3. SRM-697-DIV2

    Div2 Medium: DivisibleSetDiv2 Problem Statement      You are given a vector <int> b containing ...

  4. IIS中实现http自动转换到https

    IIS中实现http自动转换到https修改以下文件:C:\WINDOWS\Help\iisHelp\common\403-4.htm 为以下内容<!DOCTYPE HTML PUBLIC &q ...

  5. Win32编程笔记

    我都决定了目前不再接触这些个浪费精力的API了,结果为了DirectX编程我特么又回来了.....微软你的东西真是坑人 以前用这玩意的时候需要什么就查,查完就忘了,这次记一记,以后再用也不至于忘的太离 ...

  6. CStatic设置位图

    CStatic 用于显示位图 如果要显示图标,则必须要设置窗口属性为 SS_BITMAP 和 SS_CENTERIMAGE,实例代码如下: //获得指向静态控件的指针 CStatic *pStatic ...

  7. js-2018-11-01 关于break和continue语句

    1.label语句 语法:label: statement 加标签语句一般都要与for语句等循环语句配合使用. 2.break语句 立即退出循环,强制执行循环后面的语句. 3.continue语句 立 ...

  8. JAVA正则表达式matcher.find()和 matcher.matches()的区别

    1.find()方法是部分匹配,是查找输入串中与模式匹配的子串,如果该匹配的串有组还可以使用group()函数.matches()是全部匹配,是将整个输入串与模式匹配,如果要验证一个输入的数据是否为数 ...

  9. LVM(Logical Volume Manager)逻辑卷管理

    本文实验部分,完全由本人亲自动手实践得来 文章中有部分的内容是我个人通过实验测试出来的,虽以目前本人的能力还没发现不通之处,但错误难免,所以若各位朋友发现什么错误,或有疑惑.更好的建议等,盼请各位能在 ...

  10. opcache的配置

    ; Enable Zend OPcache extension module zend_extension=opcache.so ; Determines if Zend OPCache is ena ...