大数斐波那契问题

Fibonacci数列 蓝桥杯入门训练----- Fibonacci数列 问题描述   Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。   输入格式   输入包含一个整数n。   输出格式   输出一行,包含一个整数,表示Fn除以10007的余数。 说明:在本题中,答案是要求Fn 阅读详情

大数斐波那契问题

问题描述:斐波那契问题:有一串数列,第一个数和第二个数为1,从第三个数开始,其值为前面两个数之和,例如:1,1,2,3,5,8,......求该数列第n个数的值为多少
算法思路:最简单的方法是直接利用递归来进行两个数的相加,但用int型数据类型来存结果会面临一个问题,那就是数值溢出,就算用long来存数据也会面临溢出的危机,因为当n等于110的时候,数值大得惊人,为43566776258854844738105,这不是一个基本数据类型能存储的数字。所以,现在可以使用大数的思维,用数组来存数据,我们现在利用数组的特性,数组的每一个元素存数据的一位数(简单的方法,但会造成空间浪费,读者可自行增加每一个元素存的位数),这样就可以很好地解决数值溢出的问题。
#include <iostream>
using namespace std;

#define N 200      //最多位数,数值溢出时更改值

int Fab(int s1[],int s2[],int &i,int n,int &j,int &count);
//斐波那契的实现,s1用来存结果,s2用来存上一次结果,i用来记录当前结果的最高位的位置,n为运算次数,j控制递归条件,count纪录递归次数
int main()
{
    int s1[N]={1},s2[N]={1},n;
    int i=0,j=3,count=2;
    cout << "input n:\n";
    cin >> n;
    if(n > 2)
    {
        cout << "\n";
        cout << "number 1 :\n";
        cout << "1\n";
        cout << "\n";
        cout << "number 2 :\n";
        cout << "1\n";
    }
    Fab(s1,s2,i,n,j,count);
    cout << endl;
    return 0;
}
int Fab(int s1[],int s2[],int &i,int n,int &j,int &count)

{
    if(n == 1)   //当n为1时,输出1
    {
        cout << "\n";
        cout << "number 1 :\n";
        cout << "1\n";
        return 0;
    }
    else if(n == 2)     //当n为2时,输出1     1
    {
        cout << "\n";
        cout << "number 1 :\n";
        cout << "1\n";
        cout << "\n";
        cout << "number 2 :\n";
        cout << "1\n";
        return 0;
    }
    else       //当n大于等于3时,开始运用大数算法
    {
        cout << "\n";
        if(j > n)    //判断递归结束条件
            return 0;
        else
        {
            int s3[N],k;
            
            for(k=0;k<=i;k++)       //斐波那契的实现,当前位置的结果等于前面两位之和
            {
                s3[k] = s1[k];
                s1[k] = s1[k] + s2[k];
                s2[k] = s3[k];
            }
            
            int l=0,b;
            for(l=0;l<=i;l++)    //大数算法:数组的每一位纪录大数的一位数,当大于10时,向前进位
            {
                while(s1[l] >= 10)
                {
                    b = s1[l]/10;
                    s1[l+1] = s1[l+1]+b;
                    s1[l] = s1[l]-b*10;
                    l++;
                    i++;
                }
            }
            
            k = i;
            count++;   //纪录递归次数
            cout << "number " << count << " :\n";
            while(s1[k] == 0)     //得到当前最高非0位的位置
            {
                k--;
            }
            i = k;
            for(;k>=0;k--)    //因为数组时从最低位开始存储的,所以要逆序输出
            {
                cout << s1[k];
            }
            cout << "\n";
            
            j++;
            return Fab(s1,s2,i,n,j,count);    //递归
        }
    }
}

运行结果如下:

.
.
.

我们选择输出每一个位置的数,以此来判断是否每一位运算的结果都是正确的
蜜蜂问题- 斐波那契数列 题目描述 一只蜜蜂在上图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N,M<N,有多少种爬行路线? 输入输入M,N的值。 输出爬行有多少种路线。 样例输入1 14 样例输出377分析 1-1 1 1-2 1 1-3 2 1-4 3 1-5 5 1-6 8 ……. 斐波那契数列。 大数相加。#include< 阅读详情

相关推荐

hdu 2018 母牛的问题 #DP#类斐波那契#JAVA水大数

每头母牛到第四年生小牛, f[i] = f[i-1] + f[i-3], i > 4 http://acm.hdu.edu.cn/showproblem.php?pid=2018 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ i

Mr.CJ 1214

大斐波那契数

斐波那契数计算公式  : f(n)=f(n-1)+f(n-2)        (n&gt;=3) f(1)=1 f(2)=1 对于 n 比较小的情况下,下边的程序就可以实现这个功能 #include&lt;cstdio&gt; #define ll long long const int n=100; int main() { ll a[n]; a[2]=1;a[1]=1; ...

鸿杰 的博客 2463

skill使用教程,从小白到大神进阶

(2)突然无法使用(NodeJS安装参考):如果正常使用中,突然发现claude命令无法启动claude-code了,可能是claude-code正在后台自动更新,等待几分钟后再尝试使用,如果还是不行,请先运行下列代码移除claude-code,注意,如果你的node安装目录不同,要替换成自己的安装目录:rm -rf /opt/homebrew/lib/node_modules/@anthropic-ai/claude-code。安装完成后,让我们启动 Claude Code,看看它长什么样。

weixin_45036829的博客 2010

大数系列三——斐波那契数列——高效万进制,亿进制

浅谈万进制思想: 日常生活中我们习惯用十进制去运算; 为了方便电脑识别开发出了二进制,又因为2^3=8 , 2^4=16,因此应运而生了八进制与16进制。 世上本没有路,走的人多了,也便成了路,那么既然二进制可以衍生出8,16进制,为什么十进制不可以衍生更大的进制呢? 因此聪明的人们开发出了万进制,也就是10^4=10000 模仿二进制与十六进制的运算。渐渐的,我们发现万进制在进行大数运算方面有着...

weixin_43899069的博客 1693

Camera metadata

Camera metadata

weixin_42136255的博客 2529

CentOS 9 Stream 上安装 MySQL 8.0+

根据提示进行设置,包括设置新的 root 密码、禁用远程 root 登录等。MySQL 在首次安装时会生成一个临时密码。这样就完成了 MySQL 8.0.37 的安装。这将安装最新的 MySQL 8.0 版本。

小强不是坑 1679

大斐波那契数(大数加法的思想+预处理提前实现)

解题思路:斐波那契,我们很熟悉的问题,但是这道题和平常不一样,这道题的数据非常大,用我们一般用的递归或者递推的方法不仅时间复杂度低效,精度也根本达不到那个数据要求的深度。 本题中要求求到1000个斐波那契数,要知道第1000个斐波那契数的位数是非常非常多的,普通的数据类型是不可能做到的,所以就要用到大数加法的思想。 代码如下: #include&lt;stdio.h&gt; #incl...

qq_41200060的博客 1650

别再手动量了!用Python+Open3D给BIM模型做‘CT扫描’,自动揪出施工误差(附完整代码)

本文介绍如何利用Python和Open3D技术实现BIM模型的毫米级施工误差自动检测。通过点云预处理、模型配准和偏差分析,系统能自动生成三维差异热力图和验收报告,显著提升施工质量检测效率。特别适合混凝土结构错位和钢结构安装偏差等常见问题的智能分析。

weixin_29284657的博客 243

溢出与概率——斐波那契(不用大数的做法)

题目来源https://www.nowcoder.net/acm/contest/71#question  C题 此题唯一特色就是数特别大,斐波那契数列的第十万项的值超过longlong可存储的最大范围. 用字符串读取.转为数字发生溢出,高位上的数自动被去除,无法读到完整数,读到的是f(一个不完整的最多20位的longlong形整数)。  然后从斐波那契第一项开始计算第二项,第三项……第i项

pipitongkw1的博客 3777

Ubuntu20.04实时内核补丁PREEMPT_RT编译与安装全流程解析

本文详细解析了在Ubuntu20.04系统上编译与安装实时内核补丁PREEMPT_RT的全流程。从内核与补丁版本匹配、编译环境准备,到内核配置、编译排错,再到最终安装、验证与进阶优化,提供了手把手的实战指南,旨在帮助机器人、工业控制等对实时性有苛刻要求的开发者构建低延迟、高确定性的Linux系统。

weixin_29213827的博客 187

Easymesh之拓扑模块(二)

介绍 easymesh 拓扑消息:Topo discovery、Topo notification、Topo query、Topo response

qq_53619687的博客 2153

How many Fibs?(poj 2413)大数斐波那契的问题

http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=259#problem/C 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 ra

wangjunjie_123的博客 248

手把手教你学simulink(8.3)--实例:基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真

基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真。

MHD0815的博客 1208

用大数取模思想解决“又是斐波那契数列”问题

有另一种斐波那契数列:F0=7,F1=11,Fn=Fn−1+Fn−2(n≥2)。

hua3473489608的博客 616

使用GitLab限制开发者使用CI/CD的权限,三种方案

使用三种方案来限制开发人员的CI/CD权限。

知无涯 5097

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HDOJ-1250 大数斐波那契问题[大数加法]

Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3554Accepted Submission(s): 1208 Problem Description A Fibonacci sequence...

weixin_30337157的博客 65

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

斐波那契数列{大数问题}

题目描述斐波那契数列为:1,1,2,3,5,8,13.....,常规递推公式f(n)=f(n-1)+f(n-2);输入输入一个整数n(0&lt;=n&lt;=200),为多组数据。输出输出第n个斐波那契数样例输入1 2 4 样例输出1 2 5 本题思想就是将算的的每一位数放到数组里面,然后让前面两项的各个位数相加,处理好进位的问题就OK了;代码如下#include &lt;stdio.h&gt;#...

FK103的专栏 1186

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

斐波那契问题,基于大数加法

#include using namespace std; const int RADIX=10,M=1003;//RADIX表示进制 void add(int*a,int* b)//两个大整数求和,和保存在数组a中 { int i,carry=0;//carry表示进位 for(i=0;i<M+1;i++) { a[i]=a[i]+b

新博客地址:https://my.oschina.net/hebaodan/blog/ 734

斐波那契大数问题

#include int s[7500][670]; void solve() { s[1][1] = 1; s[2][1] = 1; s[3][1] = 1; s[4][1] = 1; int i,j,k=0; for(i = 5;i<7500;i++) for( j = 1;j<=670 ;j++) { k += s[i-1

oliver341的专栏 705

高精度加法与斐波那契递推:从蜜蜂路线问题解析大数运算实现

在计算机科学中,处理超出内置数据类型范围的大整数是算法竞赛和工程实践中的常见需求,这通常需要借助高精度运算技术。其核心原理是模拟手工竖式计算过程,通过数组或字符串按位存储数字,并实现基础的算术操作。这项技术的价值在于突破了硬件对整数表示的限制,使得精确计算极大数值成为可能,广泛应用于大数阶乘、动态规划计数、密码学等场景。本文以经典的斐波那契数列递推问题(如洛谷P2437“蜜蜂路线”)为例,深入剖析如何将高精度加法与递推算法结合,解决路径计数中遇到的数值溢出挑战,并探讨了压位存储等优化策略。

weixin_30751947的博客 348

hdu1316(大数的斐波那契数)

题目信息:求两个大数之间的斐波那契数的个数(C++/JAVA) http://acm.hdu.edu.cn/showproblem.php?pid=1316 这里给出java大数类代码和c++模拟代码

机器笨猫 1516

输出斐波那契数前10000项

之前也写过输出斐波那契数的程序,当然也只是前几十位。所以也没注意到当输出大于47位之后 ,就发生溢出了。直到某一天,老师让我们输出47位之后的数我才发现这个问题。于是就花了一点时间写了出来。         其实这个问题归根到底就是一个大数相加的问题,当然网上也能搜到很多关于大于数加减乘除的模版。我现在就换另外一种方法来计算大数相加的问题。思路就是分别用两个字符串来保存两个数,然后对应位分别相加

空字符 3819

hdu 1715 大菲波数 (斐波那契数列 大数问题)

大菲波数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 20440    Accepted Submission(s): 6897 Problem Description Fibonacci数列,定义如下: f(1)=

Mystic_beauty的博客 597

大数斐波那契数列c++实现

引言 斐波那契数列的定义如下:定义一组数的第一个为1,第二个为1,之后的每个数都是前两个数之和,将这样的一组数称为斐波那契数。斐波那契数的前十个数是:1,1,2,3,5,8,13,21,34,55。 它是面试中高频出现的一种代码题,主要考察的技能是递归(斐波那契数通常用递归来实现,循环也可以)。但这也是斐波那契数列最基本的操作,再深入一点的话,可以将斐波那契数列和大数加法结合起来,这也是我们这...

Mr_H9527的博客 5496
上一篇: 全排列问题
下一篇: 棋盘覆盖问题
麻豆_matou
博客等级 码龄10年 41粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值