当前位置: 首页 > news >正文

递推+高精度加法 P1255 数楼梯

递推+高精度加法 P1255 数楼梯

思路

  • 递推计算,类似斐波拉契,但是由于数据比较大,需要高精度处理
  • 斐波那契数列的规律是:每一项等于前两项之和。比如:

F(1)=1
F(2)=1
F(3)=F(1)+F(2)=2
F(4)=F(2)+F(3)=3
F(5)=F(3)+F(4)=5

从第10项开始,数值会爆炸式增长:

F(10)=55
F(20)=6765
F(30)=832040
F(40)=102334155
F(50)=12586269025

到第50项时,数值已经超过100亿!
高精度来处理才合适!

参考代码

#include<bits/stdc++.h>
using namespace std;
int n,a[5005]={1},b[5005]={1},c[5005]={1},len=1;
void f(){ //斐波那契数列的高精度求和int jw=0;for(int i=0;i<len;i++){ //模拟竖式计算,进位c[i]=a[i]+b[i]+jw;jw=c[i]/10;c[i]=c[i]%10;}if(jw!=0){c[len++]=jw;}for(int i=0;i<len;i++){ //斐波那契数列的结构a[i]=b[i]; // a = b;b[i]=c[i]; // b =c; }
}
int main(){cin>>n;for(int i=2;i<=n;i++){   //从第二个开始f();}for(int i=len-1;i>=0;i--){ //从个位输出,需要逆序输出cout<<c[i];}return 0;
}

解释

高精度计算,为什么计算时不需要逆序相加,而是直接正序计算?

  1. 数组存储方式:低位在前,高位在后
    数组 a, b, c 的每个索引 i 对应数字的 10^i 位。例如:
    a[0] 存储个位,a[1] 存储十位,依此类推。
    初始值 a[0] = 1 表示斐波那契数列的第一项是 1。
    这种存储方式与手工计算时对齐个位的逻辑一致,无需逆序。
  2. 逐位相加的逻辑
    在函数 f() 中,循环 for(int i=0; i<len; i++) 从低位(个位)开始逐位相加:
    cpp
    c[i] = a[i] + b[i] + jw; // jw 是进位
    jw = c[i] / 10; // 计算新的进位
    c[i] %= 10; // 保留当前位的值
    进位 jw 会自然传递到高位,这与手工计算时“从低位到高位处理进位”的逻辑完全一致。
  3. 动态扩展高位
    如果最高位相加后仍有进位(jw != 0),代码会扩展数组长度:
    cpp
    if(jw != 0) c[len++] = jw;
    这一步直接将进位添加到数组末尾(即更高位),符合数字位数增长的方向。
  4. 为何不需要逆序?
    逆序存储(高位在前):若数组索引 0 对应最高位,则需要逆序遍历数组相加,处理进位时还需反向调整,逻辑复杂。
    正序存储(低位在前):直接按索引顺序处理,进位自然传递到高位,无需逆序操作,代码更简洁高效。
    示例演示
    以计算 F(3) = 2 为例:

初始 a = [1], b = [1](对应数字 1 和 1)。
第一次调用 f():
c[0] = 1 + 1 + 0 = 2,无进位。
结果 c = [2],输出 2。
后续迭代会逐步处理更高位,但始终从低位开始。

http://www.dtcms.com/a/273376.html

相关文章:

  • apt -y参数的含义
  • 计算机视觉 之 数字图像处理基础(一)
  • Kubernetes 1.23.6 kube-scheduler 默认打分和排序机制详解
  • 多商户商城系统源码选型指南:开源 vs 定制,哪种更适合?
  • 救回多年未用kubeadm搭建的kubernetes集群
  • 5. isaac sim4.2 教程-Core API-操作机械臂
  • 用黑盒测试与白盒测试,读懂专利审查的 “双重关卡”​​
  • K8S的CNI之calico插件升级至3.30.2
  • 深度学习中的 Seq2Seq 模型与注意力机制
  • 解释sync.WaitGroup的用途和工作原理。在什么情况下应该使用它?
  • 时间显示 蓝桥云课Java
  • Android ViewBinding 使用与封装教程​​
  • Netron的基本使用介绍
  • UNet改进(20):融合通道-空间稀疏注意力的医学图像分割模型
  • 客户频繁问询项目进度,如何提高响应效率
  • Java 中的多线程实现方式
  • Spring AI 系列之八 - MCP Server
  • NFS文件存储及部署论坛(小白的“升级打怪”成长之路)
  • (鱼书)深度学习入门2:手搓感知机
  • PostgreSQL创建新实例并指定目录
  • 下一代防火墙混合模式部署
  • Jupyter介绍
  • MySQL事务实现原理
  • SpringCloud系列 - 分布式锁(八)
  • html页面,当鼠标移开A字标就隐藏颜色框
  • Spring Boot项目中大文件上传的优化策略与实践
  • 华为鸿蒙3.0 4.0完全关闭纯净模式的方法以及临时绕过纯净模式检测的方法
  • 接口(上篇)
  • 基于深度学习的自动调制识别网络(持续更新)
  • 亚洲牧原:活跃行业交流,延伸公益版图,市场拓展再结硕果