斐波那契大数模板

#include <iostream>
using namespace std;
static int digit = 1;     //数字的位数
class Node
{
public:
    Node()
    {
        for(int i = 0;i < 500;i++)
        {
            value[i] = 0;
        }
    }
    int value[500];      //存储数据
    friend Node operator + (const Node& a,const Node& b); //友元函数实现两个Node类型的数据加法
};

/*
重载+操作符,实现两个Node类型的数据进行加法运算
*/
Node operator+ (const Node& a,const Node& b)
{
    Node temp;  //临时数据
    int i;
    for(i = 1;i <= digit;i++)
    {
        temp.value[i] = a.value[i] + b.value[i];
    }

    for(i = 1;i < digit;i++)  //进位处理
    {
        if(temp.value[i] >= 10)
        {
            temp.value[i+1] += temp.value[i]/10;
            temp.value[i] %= 10;
        }
    }

    if(temp.value[digit] >= 10)  //判断是否这个大数又进行了进位
    {
        temp.value[digit+1] = temp.value[digit]/10;
        temp.value[digit] %= 10;
        ++digit; //最高位大于10,就进位
    }
    return temp;
}

int main()
{
    int N;
    while(cin>>N) {
    digit = 1;
    Node a,b,c;
    a.value[1] = 1;
    b.value[1] = 1;
    c.value[1] = 1;
    for(int i = 2; i <= N;i++)
    {
        c = a + b;
        a = b;
        b = c;
    }
    if(N==0) cout<<endl;
    else{
    for(int i = digit;i >= 1;i--)
    {
        cout<<c.value[i];
    }
    cout<<endl;
    }
    }
    return 0;
}

上面第一项为1,第二项为2,第三项为3,

  如果把i改为i=3开始,则第一项为1,第二项为1,第三项为2

时间: 2024-11-05 13:40:41

斐波那契大数模板的相关文章

斐波那契数列F(n)【n超大时的(矩阵加速运算) 模板】

hihocoder #1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘.对于这个棋盘,一共有多少种不同的覆盖方法呢? 举个例子,对于长度为1到3的棋盘,我们有下面几种覆盖方式: 提示:骨牌覆盖 提示:如何快速计算结果 输入 第1行:1个整数N.表示棋盘长度.1≤N≤100,000,000 输出 第1行:1个整数,表示

hdu1316(大数的斐波那契数)

题目信息:求两个大数之间的斐波那契数的个数(C++/JAVA) 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

HDOJ/HDU 1250 Hat&#39;s Fibonacci(大数~斐波拉契)

Problem Description A Fibonacci sequence is calculated by adding the previous two members the sequence, with the first two members being both 1. F(1) = 1, F(2) = 1, F(3) = 1,F(4) = 1, F(n>4) = F(n - 1) + F(n-2) + F(n-3) + F(n-4) Your task is to take

hdu 1568(Fibonacci)(就是大数的斐波那契公式)

Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3569    Accepted Submission(s): 1627 Problem Description 2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列 (f[0]=0,f[1]=1;f[i]

[模板]矩阵乘法(斐波那契数列)

洛谷P1962 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请你求出 f(n) mod 1000000007 的值. 输入输出格式 输入格式: ·第 1 行:一个整数 n 输出格式: 第 1 行: f(n) mod 1000000007 的值 输入输出样例 输入样例#1: 5 输出样例#1: 5 输入样例#2: 10 输出样例#2: 55 说明

HDU 1316 (斐波那契数列,大数相加,大数比较大小)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1316 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 c

斐波那契数列(大数)

1216: 斐波那契数列 时间限制: 1 Sec  内存限制: 128 MB 点我 题目描述 Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2) n>=3 计算第n项Fibonacci数值. 输入 输入第一行为一个整数n(1<=n<=10000). 输出 输出对应的f(n). 样例输入 1 2 3 4 5 样例输出 1 1 2 3 5 数组中每个元素存储3位,存储一位则内存超限,还有要注意每一个元素中前导为0时要把0输出,最高位则不需要,被这

问题 : 来简单地数个数(大数模拟计算斐波那契数+区间数数)

题目描述 这是一个斐波那契数列: f1 = 1 f2 = 2 fn = fn-1 + fn-2    (n>=3) 蔡老板想知道,给你两个数 a.b,你能否求出在区间[a,b]里有多少个斐波那契数. 输入 多组数据输入.一行为一组输入数据,包括两个非负整数 a.b(a <= b <= 10^100),当a=b=0 时输入终止. 输出 对每组输入,输出单独一行,包含一个整数表示区间[a,b]里的斐波那契数个数. 样例输入 10 100 1234567890 9876543210 0 0 样

ACM_无聊者序列(斐波那契数列大数+同余+规律)

Problem Description: 瓜瓜在玩着由红色和蓝色的大理石做成的玻璃珠,他将n个玻璃珠从左到右排成一个序列叫做无聊者序列.一个非空的红色和蓝色玻璃珠组成的序列是一个无聊者序列.这个序列的玻璃珠颜色是交替的,例如:序列(红色:蓝色:红色)和(蓝色)是一个无聊者序列.(红色:红色)不是无聊者序列.现在,瓜瓜想知道,从这个序列中选出一个无聊者子序列有多少种方法.并将它mod(1000000007). Input: 输入有多组数据,输入一个整数n(1 <= n <= 10^6),代表这个