首页 > 其他分享 >高精度问题

高精度问题

时间:2024-05-22 18:40:22浏览次数:29  
标签:10 高精度 int ++ 问题 re length now

高精度

洛谷P2437 蜜蜂路线

蜜蜂路线

题目背景

题目描述

一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 $m$ 开始爬到蜂房 $n$,$m<n$,有多少种爬行路线?(备注:题面有误,右上角应为 $n-1$)

输入格式

输入 $m,n$ 的值

输出格式

爬行有多少种路线

样例 #1

样例输入 #1

1 14

样例输出 #1

377

提示

对于100%的数据,$1 \le M,N\le 1000$

这题是一道简单的求斐波那契数列题,但由于题目所给数字比较大,所以需要用到高精度。

主要代码

void fun() {
    for(int i = 0; i <= length; i++) {
        re[now][i] = re[now-1][i] + re[now-2][i];
    }

    for(int i = 0; i <= length; i++) {
        if(re[now][i] >= 10) {
            re[now][i+1] += re[now][i]/10;
            re[now][i] %= 10;
        }
    }
    if(re[now][length+1]) length++;
    now++;
}
  1. 第一个循环先按位相加
  2. 第二个循环判断每一位是否大于10,如果大于10,进位re[now][i+1] += re[now][i]/10;,然后剩下个位re[now][i] %= 10;
  3. 由于高位存储于下标高的数组中,所以需要反向循环输出
    for(int i = length; i >= 0; i--) {
        cout << re[now-1][i];
    }

注意事项

  • 需要一个length作为已经记录的最高位,每次判断更高位是否有数增加最高位if(re[now][length+1]) length++;
  • 由于数组初始化为0,因此判断最高位方法正确
  • 如果两个数最高位不同,a的最高位大于b,之前已经有了最高位的更新if(re[now][length+1]) length++;所以a的最高位为length或length+1,a+b最高位同样如此

完整代码如下

#include <bits/stdc++.h>
using namespace std;

int re[1000][1000] = {0};
int now = 0, length = 0;

void fun() {
    for(int i = 0; i <= length; i++) {
        re[now][i] = re[now-1][i] + re[now-2][i];
    }

    for(int i = 0; i <= length; i++) {
        if(re[now][i] >= 10) {
            re[now][i+1] += re[now][i]/10;
            re[now][i] %= 10;
        }
    }
    if(re[now][length+1]) length++;
    now++;
}

int main() {
    int m, n;
    cin >> m >> n;
    n = n-m+1;
    m = 1;
    re[1][0] = 1;
    re[2][0] = 1;
    now = 3;
    for(int i = 3; i <= n; i++) {
        fun();
    }
    for(int i = length; i >= 0; i--) {
        cout << re[now-1][i];
    }
}

标签:10,高精度,int,++,问题,re,length,now
From: https://www.cnblogs.com/rjxq/p/18206886

相关文章

  • 一个和prufer序相关的组合问题
    对于所有长为\(n\)值域在\([1,m]\)的正整数序列,对于每一个\(1\leqslanti\leqslantm\)记\(c_{i}\)表示\(i\)在\(a\)中的出现次数,定义其权值为\(\prod_{i=1}^{m}c_{i}^{c_{i}+k}\),求所有序列的权值和对一个大质数\(p\)取模的结果(特别的,我们定义\(0^0=1\),且对于......
  • SQL Server 查询超时问题排查
    生产环境单表查询超时,表数据500万+,这点数据按道理不加不加索引都不应该超时。排查业务数据,发现业务数据每天插入25万+。初步怀疑并发导致数据处理不及时,进一步排查每分钟都有300的左右实时数据插入到业务表,锅应该不在这里排查数据服务器,发现CPU占用不高,512G的内存占用高达96%。但s......
  • vue搭建脚手架 出现问题Command vue init requires a global addon to be installed.
    使用vue-cli脚手架命令vueinitwebpackmy-App创建项目回车时显示Commandvueinitrequiresa global addontobeinstalled.Pleaserun yarn globaladd@vue/cli-initandtryagain. 解决方法:npminstall-g@vue/cli-init 然后创建项目,正常。 ......
  • 在Flink中jackson-databind包下的ObjectMapper处理大写字段问题
    需要加上配置,不然解析会失败,产生一个空对象objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true);//忽略大小写代码:publicclassStreamingJob{publicstaticvoidmain(String[]args)throwsException{finalLoggerlogger......
  • Java RMI遇到的Connection refused to Host: 127.x.x.x/192.x.x.x/10.x.x.x问题解决方
    问题故障解决记录--JavaRMIConnectionrefusedtohost:x.x.x.x....在学习JavaRMI时,我遇到了以下情况问题原因:可能大家的host是10或者192的私有地址,我估计都是和我一样的一个原因:/etc/hosts文件的配置问题(我是ubuntu系统下的实验环境),也就是主机名称和IP地址的映射关系......
  • 广度优先搜索 洛谷P1443马的遍历(bfs超时问题)
    广度优先搜索洛谷P1443这里先介绍一下广度优先搜索:广度优先搜索就是先将第一步可能的步骤全部记录,遍历过后,再将由第一步到达的第二步全部记录并遍历,直到最后全部遍历。而此题要求我们求得最少步数,广度优先就能够达到最少步数的要求,因为广度优先是先通过搜索所有可能的第n步才......
  • Dapper升级SqlSugar问题汇总
    最近群里有个小伙伴把Dapper迁移SqlSugar几个不能解决的问题进行一个汇总,我正好写一篇文章来讲解一下 一、sqlwherein传参问题:SELECT*FROMuserswhereidIN@ids答:SqlSugar中应该是//SELECT*FROMuserswhereidIN(@ids)varlistdb.Ado.SqlQuery<Users......
  • 面试疑难问题
    为什么不直接把CSV文件上传到hdfs而要用flume采集  动态分区 提取其中的时间戳断点续传 实时监听不用手动续传要有拦截器配置事务传输时更多控制能力积攒到多少批flushing一次忽略哪种类型的不上传 文件太多了一个个手动上传费时费力且容易出错我一直纠结......
  • 制定问题管理的策略
    在IT技术人员和管理人员中,我们发现一个组织中,67.34%的组织缺少一个完整的问题管理计划,您的组织是否错过了高效的问题解决流程?ServiceDeskPlus可制定您自己的问题管理策略。 什么是IT问题管理呢?问题是多重事件的原因或潜在原因,题可能来自影响许多用户的重大事件,或者来自重复......
  • 银弹:为了避免项目的成员为了一些问题争执不休,公司发明了银弹(Silver Bullet)这一工具。
    在项目管理中,银弹可以在某些情况下是有效的工具。它可以帮助解决团队成员之间的争议和分歧,促使团队更快地达成共识和决策。银弹本身并不是解决问题的方法,而是一种强制执行一方意见的手段,可以在某些情况下起到震慑作用。然而,银弹并不是万能的,它只是暂时性的解决方案。如果团队成员......