首页 > 其他分享 >蓝桥杯-【二分】求阶乘

蓝桥杯-【二分】求阶乘

时间:2024-04-09 20:58:05浏览次数:23  
标签:二分 cnt cout ll mid long 蓝桥 阶乘 check

 思路:对于有几个0,10一定会是5的整数倍,2的因子数一定比5的多,所以只要算5的个数即可,

 30%,每个n都去算

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll check(ll n) {                //计算n!末尾有多少个0
    ll cnt = 0;
    while (n)  cnt += (n /= 5);  
    return cnt;
}
int main(){
    ll k;  cin >> k;
    for(ll n=5;;n+=5){          //n是5的倍数,它含有因子5
        ll cnt = check(n);      //cnt是n!的尾零数量
        if(cnt==k){ cout << n; break;}
        if(cnt>k) { cout <<-1; break;}
    }
    return 0;
}

100%,利用二分思想

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll check(ll n) {              //计算n!末尾有多少个0
    ll cnt = 0;
    while (n)  cnt += (n /= 5);
    return cnt;
}
int main() {
    ll k;  cin >> k;
    ll L = 0, R = 1e19;       //R的初值为一个极大的数
    while (L < R) {
        ll mid = (L + R) / 2;
        if (check(mid) >= k)   R = mid;     // mid!的尾零数量超过了k,说明mid大了
        else                   L = mid + 1; // mid小了
    }
    if (check(R) == k)  cout << R ;
    else                cout << -1;
    return 0;
}

标签:二分,cnt,cout,ll,mid,long,蓝桥,阶乘,check
From: https://blog.csdn.net/zengxuan151168/article/details/137523175

相关文章

  • P8625 [蓝桥杯 2015 省 B] 生命之树
    题目:链接:https://www.luogu.com.cn/problem/P8625基本思路:1.使用dp[N]记录i节点的当前最大值2.使用vectornex[N]记录图3.使用vis[N]防回退如果该节点没有子节点,那么这个点的最大值就记录为当前的值:val如果该节点有子节点,那么先遍历子节点,然后+res并记录由于使用了vis,那么......
  • 蓝桥杯历年试题 砝码称重
    看到这个题,自然而然想到用集合set来做,因为set本身就有去重的效果。#include<bits/stdc++.h>usingnamespacestd;intN;intw;set<int>s;intmain(){ cin>>N; for(inti=1;i<=N;i++) { cin>>w; vector<int>v(s.begin(),s.end()); //这里需要用v......
  • 【每周例题】蓝桥杯 C++ 多数
    多数元素题目多数元素思路分析一.第一个想法,暴力遍历,然后会发现容易超时,那么更进一步想:哈希表使用哈希表存储每个数出现的次数,即使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数加入后,遍历所有键值对,......
  • 蓝桥杯备考随手记: Java 中常用的排序和查找方法
    1.排序方法Arrays.sort():用于对数组进行排序。它使用优化的快速排序算法来对数组进行排序。示例代码:int[]arr={5,2,8,1,6};Arrays.sort(arr);Collections.sort():用于对集合进行排序。它使用优化的归并排序算法来对集合进行排序。示例代码:List<Integer>list......
  • 蓝桥杯备考随手记: BigInteger 和 BigDecimal
    在Java中,BigInteger和BigDecimal是用来处理大整数和高精度浮点数的类,分别属于java.math包。下面分别介绍这两个类的特点、用途和常用方法:BigInteger:特点:BigInteger类表示任意精度的整数,可以处理比long型和int型更大范围的整数。BigInteger是不可变的(immutable)类,一......
  • P8794 [蓝桥杯 2022 国 A] 环境治理
    P8794[蓝桥杯2022国A]环境治理-洛谷|计算机科学教育新生态(luogu.com.cn)#include<iostream>usingnamespacestd;#definelllonglongconstintN=150;constintinf=0x7fffffff;intn,q;intd[N][N],l[N][N];intt[N][N];voidfloyd(){for(intk=......
  • 蓝桥杯学习日记
    目录方法二分+区间合并搜索与图论全排列n皇后问题走迷宫树的重心图中点的层次有向图的拓扑排序数学知识数论质数:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者素数质数判定-试除法null质因数:将正整数表示为一连串的质因子相乘分解质因数-试除法筛质数约数约数......
  • 蓝桥杯2014国A-排列序数(待续)
    [蓝桥杯2014国A]排列序数题目描述如果用abcd这\(4\)个字母组成一个串,有\(4!=24\)种,如果把它们排个序,每个串都对应一个序号:abcd0abdc1acbd2acdb3adbc4adcb5bacd6badc7bcad8bcda9bdac10bdca11cabd......
  • 【蓝桥·算法双周赛 第 9 场 小白入门赛】字符迁移【算法赛】题解(字符串+模运算+差分)
    思路差分数组是一种特殊的数组,它的第iii个数定义为原数组的第ii......
  • 【蓝桥·算法双周赛 第 4 场 小白入门赛】自助餐【算法赛】题解(分支+字符串)
    思路首先定义一个整型变量n和一个长整型变量ans,其中n用于存放输入的字符串个数,ans则用于累计所有字符串对应的价格。在接收到n之后,进入一个循环,在循环中,每次接收一个字符串s,并根据s的首字母判断该字符串对应的餐盘种类,并将其价格累加到ans中。具体来说,如果......