Factorial Trailing Zeroes

https://leetcode.com/problems/factorial-trailing-zeroes/

Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

解题思路:

再次遇见最讨厌的Math题。

开始的思路,结尾的0到底是哪来的?要有0,必须要乘积为10,那么可能2*5或者1*10,那么10又是2*5,所以就是去算有多少对2和5?再去看百度百科上20以内的阶乘 http://baike.baidu.com/view/245476.htm ,似乎也验证了有多少个5就有多少个0。因为2肯定比5多。

于是写下来下面的代码,该不会这么简单吧。

public class Solution {public int trailingZeroes(int n) {return n / 5;}
}

果然错了。想不出来,只能去求助网友。

后来看见了Wikipedia-Trailing Zeroes,

The number of trailing zeros in the decimal representation of n!, the factorial of a non-negative integer n, is simply the multiplicity of the primefactor 5 in n!. This can be determined with this special case of de Polignac's formula:[1]

f(n) = \sum_{i=1}^k \left \lfloor \frac{n}{5^i} \right \rfloor = \left \lfloor \frac{n}{5} \right \rfloor + \left \lfloor \frac{n}{5^2} \right \rfloor + \left \lfloor \frac{n}{5^3} \right \rfloor + \cdots + \left \lfloor \frac{n}{5^k} \right \rfloor, \,

where k must be chosen such that

5^{k+1} > n,\,

and \lfloor a \rfloor denotes the floor function applied to a. For n = 0, 1, 2, ... this is

0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 6, ... (sequence A027868 in OEIS).

For example, 53 > 32, and therefore 32! = 263130836933693530167218012160000000 ends in

\left \lfloor \frac{32}{5} \right \rfloor + \left \lfloor \frac{32}{5^2} \right \rfloor = 6 + 1 = 7\,

zeros. If n < 5, the inequality is satisfied by k = 0; in that case the sum is empty, giving the answer 0.

也就是说,n!的结尾0的数量就等于n/5+n/25+n/125...

不过为什么除以5以后还要再除以25,除以125?显然因为25里有2个5,125里有3个5。但是为什么不是n/5+2*n/25+3*n/125...?因为n/5里面已经包含了25里的一个5了,同样n/25也包含了n/125里的一个5了。

于是写了以下代码

public class Solution {public int trailingZeroes(int n) {int base = 5, result = 0;;while(base <= n){result += n / base;base *= 5;}return result;}
}

n=2147483647的时候,居然超时。原来是base*5到仅仅小于Integer.MAX_VALUE的时候,就超时了。

偷懒的将base申明为long,算是解决了。

public class Solution {public int trailingZeroes(int n) {long base = 5;int result = 0;while(base <= n){result += n / base;base *= 5;}return result;}
}

其实n/base,base *= 5,不就是n/base,n /= 5吗?这样做更好点。

public class Solution {public int trailingZeroes(int n) {long base = 5;int result = 0;while(base <= n){result += n / base;n /= 5;}return result;}
}

数学题真是弱啊,要重视。

转载于:https://www.cnblogs.com/NickyYe/p/4357869.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java设计模式懒汉_java设计模式-懒汉设计模式

一、理论类加载时&#xff0c;不进行实例化&#xff0c;调用时才进行类的实例化。二、代码实现public class LazyManPattern {//1.构造方法私有化private LazyManPattern(){}//2.类加载时&#xff0c;不进行实例化private static LazyManPattern lazyManPattern;//3.创建实例化…

多视图参数传递

在iOS开发中常用的参数传递有以下几种方法&#xff1a; 采用代理模式 采用iOS消息机制 通过NSDefault存储&#xff08;或者文件、数据库存储等&#xff09; 通过AppDelegate定义全局变量&#xff08;或者使用UIApplication、定义一个单例类等&#xff09; 通过控制器属性传递转…

百年难得一见!阿里园区惊现双月争辉奇观!

9月3日晚杭州阿里园区上空突然惊现“双月争辉”奇观&#xff0c;引发路人、员工争相拍照留念狂潮。记者随后深入园区探访&#xff0c;近距离观察“双月奇观”。当晚&#xff0c;热心观众王先生提供线索。王先生路过杭州阿里巴巴园区时&#xff0c;听到有人呼喊&#xff1a;“快…

Math源码java_深入学习java源码之Math.sin()与 Math.sqrt()

深入学习java源码之Math.sin()与 Math.sqrt()native关键字凡是一种语言&#xff0c;都希望是纯。比如解决某一个方案都喜欢就单单这个语言来写即可。Java平台有个用户和本地C代码进行互操作的API&#xff0c;称为JNInative关键字告诉编译器(其实是JVM)调用的是该方法在外部定义…

路由控制器Express的路由控制方法

MVC中的C控制器 express的路由控制方法&#xff1a;1.创建路由规则 var express require(‘express’); var router express.Router(); /* get home page.*/ router.get(/, function(req,res){ res.render(index, title:express); }); module.exports router; 服务器在开始…

URAL 1146 Maximum Sum(最大子矩阵的和 DP)

Maximum Sum 大意&#xff1a;给你一个n*n的矩阵&#xff0c;求最大的子矩阵的和是多少。 思路&#xff1a;最開始我想的是预处理矩阵&#xff0c;遍历子矩阵的端点&#xff0c;发现复杂度是O(n^4)。就不知道该怎么办了。问了一下&#xff0c;是压缩矩阵&#xff0c;转换成最大…

基于 axios 的 Vue 项目 http 请求优化

对于需要大量使用 http 请求的项目&#xff0c;我们通常会选择对 http 请求的方法进行二次封装&#xff0c;以便增加统一的拦截器&#xff0c;或者统一处理阻止重复提交之类的逻辑。Vue.js 的项目中我们选择使用了 axios 这样一个 http 库&#xff0c;下面也就简述下基于 axios…

Spring 事务配置5种方式

Spring配置文件中关于事务配置总是由三个组成部分&#xff0c;分别是DataSource、TransactionManager和代理机制这三部分&#xff0c;无论哪种配置方式&#xff0c;一般变化的只是代理机制这部分。 DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化&…

java中主线程首先执行_java经典面试题:子线程先运行30次主线程,主线程40次,如此循环50次?...

最近偶遇这道题&#xff0c;网上相似的题都是循环次数不一样。然而我百度搜到的论坛或者博客感觉都不太对&#xff0c;运行有穿插。请给出正确结果。我们假使所有人都引入了业务对象。并且我有疑问&#xff1f;感觉题目本意不是new Thread()放在前面。网上有人做法是用标志位防…

[翻译]Feedback on the Go Challenge solutions

第一次Go Challenge比赛&#xff0c;中国区只有3人参赛。 赛后收到邮件&#xff0c;是一个审阅者的反馈&#xff0c;“Feedback on the Go Challenge solutions”&#xff0c;摘录如下&#xff1a; 保持简单粗暴 一个语义单元一个文件即可&#xff0c;不要像Java那样一个文件就…

黑客宣称掌握了600多万个Instagram账号的信息

据外媒报道&#xff0c;上周早些时候&#xff0c;歌手兼演员赛琳娜戈麦斯因Instagram账号被盗而发出大量来自前男友贾斯汀比伯的裸照。不过当时很快赛琳娜就拿回了对账号的控制权并删掉了这些裸照。就在大家以为这件事情已经平息的时候&#xff0c;Instagram却被曝光了一个极为…

java apache.poi_Java Apache POI

我正在努力从excel文档中读取数据,该文档每两周更新一次,大约有50,000行数据,在开始新工作表之前可能会达到大约120,000.我正在使用Apache POI来获取数据.我在下面得到了这个例外,但我认为最重要的一个例外是引起&#xff1a;java.lang.OutOfMemoryError&#xff1a;Java堆空间…

Hibernate逍遥游记-第2章-使用hibernate.properties

1. 1 package mypack;2 3 import org.hibernate.*;4 import org.hibernate.cfg.Configuration;5 import java.util.*;6 7 public class BusinessService{8 public static SessionFactory sessionFactory;9 10 /** 初始化Hibernate&#xff0c;创建SessionFactory实例 */1…

奇怪吸引子---Aizawa

奇怪吸引子是混沌学的重要组成理论&#xff0c;用于演化过程的终极状态&#xff0c;具有如下特征&#xff1a;终极性、稳定性、吸引性。吸引子是一个数学概念&#xff0c;描写运动的收敛类型。它是指这样的一个集合&#xff0c;当时间趋于无穷大时&#xff0c;在任何一个有界集…

C#打印图片

打印的原理是&#xff1a;生成mdi文件&#xff0c;系统碰到mdi的时候会自动以打印的方式处理。所以&#xff0c;不管用什么模板&#xff0c;什么方式&#xff1b;能在PrintPage事件处理中,生成一张要打印内容的图片就OK了! C#实现打印源码如下&#xff1a; #region 打印 …

mysql 里面不等于符号_mysql 不等于 符号写法

经过测试发现mysql中用<>与!都是可以的&#xff0c;但sqlserver中不识别!,所以建议用<>selece * from jb51 where id<>45sql 里 符号<> 于 ! 的区别<> 与!都是不等于的意思&#xff0c;但是一般都是用<>来代码不等于因为<>在任何SQL…

Delphi通过ICMP检测与远程主机连接

{ ping IP 地址&#xff08;返回false or true&#xff09; 2015-03-23} function PingHost(HostIP: String): Boolean; typePIPOptionInformation ^TIPOptionInformation;TIPOptionInformation packed recordTTL:Byte;TOS:Byte;Flags:Byte;OptionsSize:Byte;OptionsData:PC…

安装SQL2012出现[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1

本人安装SQL2012出现这个错误&#xff0c;找了三天三夜&#xff0c;终于把问题找出来&#xff0c;共享给有需要的人们&#xff0c;不用重新换系统 错误如下: 1&#xff0c;此问题是系统.net Framework版本冲突&#xff0c;首先下载.net Framework清理工具&#xff08;如:cleanu…

Java学习笔记之equals和Objects.equals

equals 相信大家就知道&#xff0c;就是比较&#xff0c;我们平时也会在自己定义的类中加入自己重写的equals用来比较两个类是否相同&#xff0c;例如这样 public class Person {private String name; //姓名private int age; //年龄private String nickName; //昵称public Per…

java限制发送短信次数_使用java发送短信验证码码,出现流量限制怎么办?急急急...

注册登录后需要企业认证,直接在某度上找一张清晰有红章的企业营业执照,注意要细心点,要看看有没有水印。我第一次就没注意上传了一张有水印的营业执照&#xff0c;从此这个账号再也没有审核通过了&#xff0c;后面只能换个账号。都是后台人工审核的&#xff0c;比较严格。如果时…