【蓝桥备赛】求阶乘

这篇具有很好参考价值的文章主要介绍了【蓝桥备赛】求阶乘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接

求阶乘

个人想法

之前做过计算阶乘结果后面有几个0的题目,这里看到本题之后,很快就有思路了。想要得到阶乘结果有几个0,首先尾数后面的0,最小肯定是因为因子中存在10。然后,10如何得来呢? 2 * 5 = 10。
在计算阶乘的过程中,以 1~5为例,有三个因子2(2、4),一个因子5,所以在阶乘过程中,2的个数肯定是远大于5的。
如此,我们这题主要就是计算参与阶乘的所有数中有几个5。
对于给定的 k ,我们可以通过从 5 开始挨个累加,但是如果遇上非常大的数,耗时可能会比较长。所以我们此处使用二分查找,查找可能满足题目输入K的答案。
但是为什么会出现不满足的情况呢?此处使用我列举的一堆草稿…
比如我要找到一个阶乘结果后缀有5个0的时候,是无法找到对应的数的。因为正常情况每遇到一个5的倍数,就会增加一个因子5,但是像25这种数,就包含2个因子5,当乘以25时,后缀一下子多了2个0。
【蓝桥备赛】求阶乘,# 蓝桥,java,开发语言,蓝桥杯,算法文章来源地址https://www.toymoban.com/news/detail-810792.html

参考代码

Java

import java.util.Scanner;

public class Main {
    static long k;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        k = sc.nextLong();
        long l = 1L, r = (long) 1e19;
        while (l <= r) {
            long mid = (r - l) / 2 + l;
            if (check(mid) >= k) {
                r = mid - 1;
            } else {
                l = mid + 1;
            }
        }
        if (check(l) == k) System.out.println(l);
        else System.out.println(-1);
    }

    static long check(long n) {
        long cnt = 0;
        while (n > 0) {
            cnt += n / 5;
            n /= 5;
        }
        return cnt;
    }
}

C++

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

ll k;

ll check(ll n)
{
    ll cnt = 0;
    while (n)
    {
        cnt += n / 5;
        n /= 5;
    }
    return cnt;
}

int main()
{
    cin >> k;
    ll l = 1, r = 5L * k;
    while (l <= r)  
    {
        ll mid = l + (r - l) / 2;
        if (check(mid) >= k)
            r = mid - 1;
        else
            l = mid + 1;
    }
    if(check(l) == k) cout << l;
    else cout << -1;
    return 0;
}

到了这里,关于【蓝桥备赛】求阶乘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯备赛 day 1 —— 递归 、递归、枚举算法(C/C++,零基础,配图)

    目录 🌈前言 📁 枚举的概念 📁递归的概念     例题: 1. 递归实现指数型枚举 2. 递归实现排列型枚举 3. 递归实现组合型枚举 📁 递推的概念    例题: 斐波那契数列 📁习题 1. 带分数 2. 反硬币 3. 费解的开关 📁 总结                  这篇文章主要是准备蓝桥杯竞

    2024年02月03日
    浏览(46)
  • 蓝桥杯刷题014——求阶乘(二分法)

    蓝桥杯2022省赛题目 问题描述 满足 N ! 的末尾恰好有  K 个 0 的最小的 N 是多少? 如果这样的 N 不存在输出 −1 。 输入格式 一个整数 K 。 输出格式 一个整数代表答案。 样例输入 样例输出 评测用例规模与约定 对于 30% 的数据, 1≤K≤10^6. 对于 100% 的数据, 1≤K≤10^

    2023年04月12日
    浏览(34)
  • 冲刺十五届蓝桥杯P0001阶乘求和

    阶乘是蓝桥杯中常考的知识。 首先我们需要知道 int 和long的最大值是多少。 我们可以知道19的阶乘就已经超过了long的最大值,所以让我们直接计算202320232023!的阶乘是不现实的。 所以我们需要突破题目的限制,看透问题。 首先需要知道的一点,n!的末尾想要有0,中间一定

    2024年02月07日
    浏览(38)
  • 蓝桥备赛——矩阵读入

    如上图所示,是一道有关二维前缀和的问题,因为涉及到二维,肯定就是以矩阵的形式进行读入的。 为此,针对矩阵的读入形式进行总结,可以大致总结出两种类型如下:  可以看到上面代码的 表示的是对于第一个[ ]中的元素是生成一个行向量,对于外面的第二个[ ]表示的

    2024年04月08日
    浏览(39)
  • 【蓝桥备赛】矩形总面积——计算几何

    矩形总面积 根据题意,两个矩形如果存在重叠部分,只会是这三种其一。不过再仔细观察这些边的关系,容易得到以下计算重叠区域大小的方法。 那么,这道题的解法就是,计算两个矩形的面积再减去重复部分(如果有重复部分的话) 看完下方的代码,可能有人奇怪为什么

    2024年01月24日
    浏览(44)
  • 蓝桥杯备赛|成绩统计|排列字母|纸张尺寸

    目录   1 成绩统计 题目描述 输入描述 输出描述 输入输出样例 示例 1.1 解题思路 1.2 AC_Code Python 标程 2 排列字母 问题描述 2.1 解题思路 2.2 AC_Code Python 标程 3 纸张尺寸 问题描述 输入格式 输出格式 样例输入1 样例输出1 样例输入 2 样例输出 2 运行限制 3.1 解题思路 3.2 AC_Code P

    2023年04月09日
    浏览(41)
  • 蓝桥杯国赛备赛(嵌入式组)

    引脚控制 PA3 :RCLK 串型存储时钟输入 (上升沿有效) PA2 :SCK 串行移位时钟输入(上升沿有效) PA1 :SER 串型数据输入 发送数据时先发高位:因为会通过移位寄存器将他移到最后一个位置。 1、程序设计 (1)拓展板跳线帽连接(如下图) (2)配置PA1、PA2、PA3为推挽输出 (3)

    2024年02月07日
    浏览(41)
  • 蓝桥杯备赛(Day5)——二叉树

    普通做法,二叉树一个节点包括结点的数值以及指向左右子节点的指针 在class Node中 在竞赛中,我们往往使用静态数组实现二叉树,定义一个大小为N的静态结构体数组,使用其来存储一棵二叉树。 使用静态数组时,对应的tree假如不是满二叉树,则应该使用-1或者0填补空缺,

    2024年02月09日
    浏览(47)
  • 蓝桥杯专题-试题版-【龟兔赛跑预测】【回形取数】【阶乘计算】【矩形面积交】

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 点击跳转=软考全系列 点击跳转=蓝桥系列 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、

    2024年02月11日
    浏览(42)
  • 蓝桥杯赛前自救攻略,备赛抱佛脚指南

    明天就要开始蓝桥杯了,然鹅还什么都没准备,就挺秃然的,凉凉但是还是要抱一下佛脚。这里分享一下上届蓝桥杯C++组混子选手的赛前自救笔记!以下是chatGPT的回答 蓝桥杯是国内最具影响力的计算机比赛之一,参赛选手要面对各种难度的编程题目。以下是蓝桥杯比赛前一

    2024年02月02日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包