N阶乘尾部的0个数
N阶乘尾部的0个数
描述
设计一个算法,计算出n阶乘中尾部零的个数
思路:
1、1 * 2 * 3 * ... * n --> 1 * 2 * 3 * (2 * 2) * 5 * (2 * 3) * 7 *(2 * 2 * 2) * (3 * 3) *(2 * 5) * ...化成质数相乘,只有2 * 5才可能得到结果有尾数中有0
2、因为2的个数是比5多的,求0的个数问题就转化成了求5的个数的问题
3、5 * 5 * 5 * 5 * 5 * ... * 5有n个5 ; 得到有n个5;有几个
4、… ; …
5、5 * 5 有2个5 ; n/5/5得到有两个5有几个,这中也包含了3-4的情况
6、5 * 1 有一个5 ; n/5得到有一个5有几个,这中也包含了3-5的情况
7、把3-6计算的结果相加;
好了,我们跟着思路来写一下代码
/**
* 统计n阶乘尾部的0个数
* 思路:
* 1、1*2*3*...*n --> 1*2*3*(2*2)*5*(2*3)*7*(2*2*2)*(3*3)*(2*5)*...化成质数相乘,只有2*5才可能得到结果有尾数中有0
* 2、因为2的个数是比5多的,求0的个数问题就转化成了求5的个数的问题
* 3、5*5*5*5*5*...*5有n个5 ; 得到有n个5有几个
* 4、... ; ...
* 5、5*5 有2个5 ; n/5/5得到有两个5有几个,这中也包含了3-4的情况
* 6、5 有一个5 ; n/5得到有一个5有几个,这中也包含了3-5的情况
* 7、把3-6计算的结果相加
*
*
* @param n
* @return
*/
public static long trailingZeros(long n) {
long sum = 0;//统计尾部的0
//用一个while循环来实现6-3,因为6也包含5-3,5也包含4-3...,所以n不需要再乘以5的个数
while( (n = n/5) !=0 ) {
sum += n;
}
return sum;
}
N阶乘尾部的0个数的更多相关文章
- AJPFX:不用递归巧妙求出1000的阶乘所有零和尾部零的个数
package com.jonkey.test; import java.math.BigInteger; public class Test6 { /*** @param args* 需求:求出1 ...
- 计算阶乘n!末尾0的个数
一.问题描述 给定一个正整数n,请计算n的阶乘n!末尾所含有“0”的个数.例如: 5!=120,其末尾所含有的“0”的个数为1: 10!= 3628800,其末尾所含有的“0”的个数为2: 20!= ...
- (笔试题)N!尾部连续0的个数
题目: 对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度.如:18!=6402373705728000,尾部连续0的个数是3. (不用考虑数值超出计算机整数界限的问题) 思路 ...
- POJ 1401:Factorial 求一个数阶乘的末尾0的个数
Factorial Time Limit: 1500MS Memory Limit: 65536K Total Submissions: 15137 Accepted: 9349 Descri ...
- C语言中的位操作(16)--计算二进制数字尾部连续0的数目
本篇文章介绍计算二进制数字尾部连续0的数目的相关算法,例如:v=(1101000)2,该数尾部连续0的数目=3 方法1:线性时间算法 unsigned int v; // 需要计算的目标整数 int ...
- NYOJ1026 阶乘末尾非0 【模板】
阶乘末尾非0 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描写叙述 我们的问题非常是简单.n! 末尾非0数是几? 比方n=5的时候,n! =120,那么n!末尾非0数是2. ...
- cut-trailing-bytes:二进制尾部去0小工具
背景 之前的文章 二进制文件处理之尾部补0和尾部去0 中介绍了一种使用 sed 去除二进制文件尾部的 NULL(十六进制0x00)字节的方法. 最近发现这种方法有局限性,无法处理较大的文件.因为 se ...
- 笔试算法题(33):烙饼排序问题 & N!阶乘十进制末尾0的个数二进制最低1的位置
出题:不同大小烙饼的排序问题:对于N块大小不一的烙饼,上下累在一起,由于一只手托着所有的饼,所以仅有一只手可以翻转饼(假设手足够大可以翻转任意块数的 饼),规定所有的大饼都出现在小饼的下面则说明已经排 ...
- 计算n阶乘中尾部零的个数
大佬答案 大佬的思路看了好久,每次看都会明白一丢丢,现在还有不明白的地方,但是要往后继续加油了,知新温故. 结论:参与阶乘的所有数的因子中只要存在一个2和一个5就会在阶乘的结果中产生一个0. 又因为因 ...
随机推荐
- Python文档记录
Beautiful Soup 4.2.0 文档 Python3网络爬虫开发实战 Python库-requests 文档 Selenium with Python中文翻译文档 http://www.te ...
- HTTP的简单的解析
HTTP 中文全称为超文本传输协议是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途 ...
- Leetcode480-Binary Tree Paths-Easy
480. Binary Tree Paths Given a binary tree, return all root-to-leaf paths. Example Example 1: Input: ...
- Linux——入门命令
授课内容: 0.linux系统由来 linux各种常用命令以及对命令参数选项的熟悉: 1.目录操作命令([跳转:查看自己当下的位置-绝对路径:查看任何路径下的目录内容]pwd(Print Workin ...
- python 警惕 IEEE 754标准
双精度浮点数格式,即IEEE 754标准 >>> 0.1+0.2 0.30000000000000004 >>> (0.1+0.2)==0.3 False > ...
- MVC _Ajax的使用【七】
一.本篇主要写的是在MVC项目中一种ajax的使用方法 1. 首先在控制器中创建两个方法,showCreate()和AddUserInfo() using System; using System. ...
- LINUX介绍
Linux操作系统被称为领先的服务器操作系统之一,它被普遍和广泛使用着.全球大约有数百款的Linux系统版本,每个系统版本都有自己的特性和目标人群. Linux的发行版本可以大体分为两类,一类是商业公 ...
- guxh的python笔记六:类的属性
1,私有属性 class Foo: def __init__(self, x): self.x = x 类的属性在实例化之后是可以更改的: f = Foo(1) print(f.x) # 1 f.x ...
- laravel框架中的邮箱发送
1.设置邮件服务器登录 163邮箱设置 POP3/SMTP/IMAP勾选:POP3/SMTP服务 IMAP/SMTP服务 保存 设置客户端授权密码 2.在laravel中配置服务器 打开.env文件 ...
- python入门-基础语法
一.变量 定义字符串要加单引号‘’ 变量命名规范: 变量名只能是字母.数字或下划线的任意组合 变量名的第一个字符不能是数字 变量名不能用关键字 变量名不要用中文 变量名不要太长,区分大小写 面就用单引 ...