2. 尾部的零【简单】

设计一个算法,计算出n阶乘中尾部零的个数。

思路:0的个数取决于5因子的个数,5的一次方对答案贡献一个0,5的平方贡献两个0,5的三次方贡献3个0......以此类推。

代码:

class Solution
{
    public:
        /*
         * @param n: A long integer
         * @return: An integer, denote the number of trailing zeros in n!
         */
        long long trailingZeros(long long n)
        {
            // write your code here, try to do it without arithmetic operators.
            long long cnt=0;
            long long b=5;
            long long tmp;
            while(tmp)
            {
                tmp=n/b;
                cnt+=tmp;
                b*=5;
            }
            return cnt;
        }
};

原文地址:https://www.cnblogs.com/chenamao/p/8342873.html

时间: 2024-10-12 22:17:46

2. 尾部的零【简单】的相关文章

LintCode 尾部的零

设计一个算法,计算出n阶乘中尾部零的个数 样例 11! = 39916800,因此应该返回 2 分析:0的个数=5的倍数+5^2的倍数+5^3的倍数+5^4的倍数+5^5的倍数+-- class Solution { public: // param n : description of n // return: description of return long long trailingZeros(long long n) { long count=0;//一定是long~~~~ for(

2.尾部的零

题目要求出阶乘尾部后有多少个0,其实就是问阶乘里面有多少个10.所以这个问题也就可以等效于问表示阶乘这个数的质因数分解总共有多少个2与5,而2的个数肯定比5的个数多,所以我们只需要求出有多少个5就行了.而质因数分解一个数里有多少个5可以用公式:\(n/5+n/5/5+n/5/5/5+--\)来进行计算. 很多博客都介绍了这种算法,但是没有讲解具体的计算原理(或许是因为有些简单).这里,我们假设要求1到100里质因数分解后5的个数,首先肯定是先找5的倍数,即5,10,15,20,25--.注意到它

LintCode 2. 尾部的零

题目:设计一个算法,计算出n阶乘中尾部零的个数. 样例 11! = 39916800,因此应该返回 2 挑战 O(logN)的时间复杂度. 解:2*5=10;可当n!展开,观察得2的个数肯定比5的个数多,所以只需统计n!中5的个数即可知尾0的个数. class Solution { public: /* * @param n: A long integer * @return: An integer, denote the number of trailing zeros in n! */ lo

NYOJ995硬币找零(简单dp)

1 /* 2 题意:给你不同面额的硬币(每种硬币无限多),需要找零的面值是T,用这些硬币进行找零, 3 如果T恰好能被找零,输出最少需要的硬币的数目!否则请输出剩下钱数最少的找零方案中的最少硬币数! 4 5 思路:转换成完全背包的问题! 6 */ 7 #include<iostream> 8 #include<cstring> 9 #include<cstdio> 10 #include<algorithm> 11 #define INF 0x3f3f3f3

移动零---简单

题目: 给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 思路: 典型的双指针题目,用一个指针找到0,用另一个指针找到非零,两者交换,同时保证非零的指针较小. class Solution { public: void moveZeroes(vector<int>& nums) { int length=nums.size(); int i=0,j=0; while(i&

OC基础回顾(十四)文件加载与保存

Cocoa提供两个处理文件的通用类:属性列表和对象编码. 1.属性列表 在Cocoa中,有一个类名为属性列表(property list)的对象,通常简写为plist.这些列表包含 Cocoa知道如何操作的一组对象.具体来讲,Cocoa知道如何将它们保存到文件中并进行加载.属性列表类包括NSArray.NSDictionary.NSString.NSNumber.NSDate和NSData,以及它们的可修改形态变体(只要它们拥有前缀为Mutable的类). 1.1 NSDate NSDate是C

[Qt 5.6.2] 利用Qt实现一个难度可变的2048小游戏

利用Qt实现一个难度随时可调的2048小游戏 一.游戏简介 1.规则创新 胜利条件:达成2048 难度变化:玩家可以通过调整难度条来控制随机池(2.4.8.16)中各个数出现的概率,同时也会改变分数的加成比例 移动触发:每次移动后会从随机池中按照概率随机选取一个数,将其随机放置在一个空余位置上 分数计算:总分=基础分+加成分,基础分+=合并的数值,加成分+=随机生成的数值*加成比例 2.游戏效果 二.设计思路 先将该项目分为游戏入口.主窗口设计与游戏逻辑三个主要模块,再在这三个模块的基础上继续细

4.9链表&amp;状态机与多线程

4.9.1链表的引入 4.9.1.1.从数组的缺陷说起 (1)数组由两个缺陷.一个是数组中所有元素的类型必须一致.数组的元素个数必须事先指定,并且一旦指定后不能更改. (2)如何解决数组的2个缺陷:数组的第一个缺陷考结构体解决.结构体允许其中的元素类型不相同,因此解决了数组的第一个缺陷.因此结构体是因为数组不能解决某些问题而被发明出来的 (3)如何解决数组的第二个缺陷?我们希望数组的大小能够实时扩展, 比如一开始我们定义了元素个数是10,后来程序运行时觉得不够因此扩展为20.普通的数组显然不行,

2017校招常考算法题归纳&amp;典型题目汇总

2017校招即将来临,我们为大家整理了2017校招的常考算法类型,以及对应的典型题目. 另附参考答案地址:http://www.jiuzhang.com/solution/ 数学 尾部的零 斐波纳契数列 x的平方根 x的平方根 2 大整数乘法 骰子求和 最多有多少个点在一条直线上 超级丑数 比特位操作 将整数A转换为B 更新二进制位 二进制表示 O(1)时间检测2的幂次 二进制中有多少个1 动态规划 编辑距离 正则表达式匹配 交叉字符串 乘积最大子序列 二叉树中的最大路径和 不同的路径 通配符匹