高精度斐波那契

2023-11-10

1.为何会有高精度斐波那契一说?

 0 0
 1 1
 2 1
 3 2
 4 3
 5 5
 6 8
 7 13
 8 21
 9 34
10 55
11 89
12 144
13 233
14 377
15 610
16 987
17 1597
18 2584
19 4181
20 6765
21 10946
22 17711
23 28657
24 46368
25 75025
26 121393
27 196418
28 317811
29 514229
30 832040
31 1346269
32 2178309
33 3524578
34 5702887
35 9227465
36 14930352
37 24157817
38 39088169
39 63245986
40 102334155
41 165580141
42 267914296
43 433494437
44 701408733
45 1134903170
46 1836311903
47 2971215073
48 4807526976
49 7778742049
50 12586269025
51 20365011074
52 32951280099
53 53316291173
54 86267571272
55 139583862445
56 225851433717
57 365435296162
58 591286729879
59 956722026041
60 1548008755920
61 2504730781961
62 4052739537881
63 6557470319842
64 10610209857723
65 17167680177565
66 27777890035288
67 44945570212853
68 72723460248141
69 117669030460994
70 190392490709135
71 308061521170129
72 498454011879264
73 806515533049393
74 1304969544928657
75 2111485077978050
76 3416454622906707
77 5527939700884757
78 8944394323791464
79 14472334024676221
80 23416728348467685
81 37889062373143906
82 61305790721611591
83 99194853094755497
84 160500643816367088
85 259695496911122585
86 420196140727489673
87 679891637638612258
88 1100087778366101931
89 1779979416004714189
90 2880067194370816120
91 4660046610375530309
92 7540113804746346429
93 12200160415121876738

由上可知,斐波那契数列若在一个很大的数据范围内必然会超出数据范围,所以在做有关斐波那契数列有关的题目时要注意是否要使用高精防止超出数据范围

2.高精的引入

我们先来看一下高精度加法

for(int i=1;i<=len;i++){
    if(a[i]>9){
        a[i+1]+=a[i]/10;
        a[i]%=10;
    }
}
if(a[len+1]!=0)
    len++;

个人理解:为防止数据超出范围,利用数组来储存每一位数来进行输出,若数组某一部分大于九,则取十进一

3.高精与斐波那契的结合

long long a[2000][6666];//2000代表斐波那契数列第2000个数,6666代表的是高精度位数(防止位数不够)
for(int i=1;i<=len;i++){
    a[n][len]=a[n-1][len]+a[n-2][len];//这里是纯计算斐波那契数列,len不变,记录当下的值
}
for(int i=1;i<=len;i++){//对每一位数进行判断,如果出现大于9的数,说明需要进位
    if(a[n][len]>9){
        a[n][len+1]+=a[n][len]/10;
        a[n][len]%=10;
    }
}
if(a[n][len+1]!=0)
    len++;

4.具体题目分析

洛谷P2437蜜蜂路线

#include<bits/stdc++.h>
using namespace std;
int a[1100][1100];
int main(){
	int m,n;
	int flag=0;
	cin>>m>>n;
    a[0][1]=0;
	a[1][1]=1;
	a[2][1]=2;
	for(int i=3;i<=n-m;i++){
		for(int j=1;j<1100;j++){
			a[i][j]=a[i-1][j]+a[i-2][j];
		}
		for(int j=1;j<1100;j++){
			while(a[i][j]>9){
				a[i][j+1]++;
				a[i][j]-=10;
			}
		}
	}
	for(int i=1100;i>1;i--){
		if(a[n-m][i]==0&&!flag) continue;//特判第一位是否为零
		flag=1;
		cout<<a[n-m][i];
		
	}
	cout<<a[n-m][1]; //特判n-m=0时
	return 0;
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高精度斐波那契 的相关文章

随机推荐

  • XSS、CSRF攻击以及预防手段

    文章目录 XSS 反射型 持久型 DOM型 XSS如何防御 CSRF XSS XSS全程Cross Site Scripting 名为跨站脚本攻击 是一种常见于 Web 应用中的计算机安全漏洞 恶意攻击者往 Web 页面里嵌入恶意的客户端脚
  • 【VBA编程】VBA基础语法(一)

    一 VBA中的数据类型 VBA里的数据类型有 字节型 Byte 整数型 Integer 长整数型 Long 单精度浮点型 Single 双精度浮点型 Double 货币型 Currency 小数型 Decimal 字符串型 String 日
  • 《数据清洗》第五章操作实例

    案例一介绍 通过Kettle工具 消除CSV文件merge csv中完全重复的数据 1 打开Kettle工具 创建转换 通过使用Kettle工具 创建一个转换repeat transform 并添加 CSV文件输入 控件 唯一行 哈希值 控
  • 把多页Word文档缩小打印到同一张纸上

    方法一 首先要确定纸张的大小和方向 系统默认的是 A4 纸 方向纵向 如果要改变 可单击 文件 页面设置 进行相应的更改 单击 插入 文本框 横排 然后在刚才新建的文档中画出一个文本框 大小大约为这页纸的四分之一 然后将鼠标放到该文本框的边
  • 关于某些特殊时候按钮disabled属性失效时的解决办法

    今天遇到了一个BUG 导致下一步按钮中的属性即时有disabled时 点击按钮依然会触发按钮的点击事件 以下为下一步按钮的JS代码 下一步 btn step click function e if this hasClass layui b
  • 常见排序算法--合并排序

    思路 将一个无序的序列分组 直至分为每两个元素一组 如果有单个元素剩余 则可以剩余的单个元素自己一组 小组内排序 然后合并成一个有序的序列 例子 排序过程如图所示 图片摘选自 https blog csdn net ZY cat artic
  • 腾讯云nginx配置ssl证书实现https

    1 申请证书 2 下载证书 签发后 里面包含nginx 1 1 域名 bundle crt 2 2 域名 key 3 配置nginx文件 在配置ssl证书之前 要确保你的nginx已经安装了ssl模块 如果没有请安装 gt sbin ngi
  • rstudio导入txt文件_r语言怎么读取txt文件

    展开全部 1 r语言62616964757a686964616fe59b9ee7ad9431333431376533读取txt文件的方法 首先根据下图图片中的命令代码进行输入 2 然后这样就可以读取txt文件了 结果图如下 3 R读取csv
  • 模拟网盘(基于多线程TCP)

    题目描述 模拟一个网盘实现以下功能 用户可以注册 登录 上传和下载文件 用户可以实现类似 ls的功能查询文件信息 多用户间文件可以共享 要求 基于TCP协议 server端要用多线程实现 在linux下用C语言实现 需要实现的功能 服务器端
  • 基于java的支付宝即时到账支付

    java实现支付宝即时到账支付 演示地址 支付宝电脑网站支付 支持回调 支付成功后即可回到自己自定义的回调页面 下载地址 java实现支付宝即时到账支付 源码世界 下载后在本地只需把你的几个配置参数改成自己的即可完美实现在线支付 应用ID
  • Java封装的概念

    封装是面向对象的三大特征之一 封装 继承 多态 概念 封装就是将类里的某些信息隐藏 不允许外部程序直接调用 可以对成员变量更准确的控制 举例 通过以上代码 可以看到 如过X类的成员变量直接被调用 那么可能会出现赋值越界的情况 年龄不可能小于
  • MongoDB分片实战(一):集群搭建

    随笔 97 文章 9 评论 337 MongoDB分片实战 一 集群搭建 环境准备 Linux环境 主机 OS 备注 192 168 32 13 CentOS6 3 64位 普通PC 192 168 71 43 CentOS6 2 64位
  • Maven 4、JDK配置

    当你的idea中有多个jdk的时候 就需要指定你编译和运行的jdk 在settings xml中配置
  • 使用命令把类打成jar包

    测试用类 public class Hello public static void main String args System out println hello world 一般的Jar包 生成class文件 在命令行中输入下面代码
  • windows桌面应用自动化测试

    1 AutoIt3 原理 使用spy抓应用的hwnd 根据hwnd获取窗口信息 模拟发送鼠标按键 移动窗口实现自动化操作 缺点 获取到的信息少 编程实现复杂 2 UIAutomation msdn介绍 Microsoft UI Automa
  • STM32 USB DFU功能

    STM32 USB DFU功能 工具的安装配置 CubeMX上配置 完善接口 工具使用 HEX固件转为DFU文件 更新固件 DFU特点 工程代码 DFU的全称为 DownLoad Firmware Update即固件升级 以下配置以STM3
  • Junit5单元测试

    配置 Maven配置 我用的spring版本是2 2 2 其实引入一个就行
  • 解读开源 Go HTTP 框架 Hertz

    前言 在参与 Hertz 框架的开发迭代过程中 对 Hertz 的主库也越来越熟悉 接下来的几篇文章我将分别解析 Hertz 的服务注册 服务发现和负载均衡拓展 最后会使用适配于 Hertz 的 etcd 拓展进行实战 欢迎大家关注 Her
  • DSP之TMS320F28335学习总结与笔记(二)————ADC模块

    F28335 ADC模块 ADC转换模块 A D转换器 ADC 将模拟量转换为数字量通常要经过四个步骤 采样 保持 量化和编码 采样 将一个时间上连续变化的模拟量转化为时间上离散变化的模拟量 保持 将采样结果存储起来 直到下次采样 这个过程
  • 高精度斐波那契

    1 为何会有高精度斐波那契一说 0 0 1 1 2 1 3 2 4 3 5 5 6 8 7 13 8 21 9 34 10 55 11 89 12 144 13 233 14 377 15 610 16 987 17 1597 18 258