![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题
文章平均质量分 68
caiyichaobupt
这个作者很懒,什么都没留下…
展开
-
2.2 有关阶乘
<br />编程之美 2.2 不要被阶乘吓到<br />题目要求:给你一个N,求他的阶乘的末尾有多少个0 , 求它二进制表示中最低位1的位置<br /> <br />题目1思路:肯定不可能求N的阶乘,不然乘死了,怎么样会有0?10的倍数,还有5和2的积,显然,10可以化成2*5 ,那么我们只要对N的阶乘的记过进行质因数分解,看有多少个pair<2,5>就行了,显然,2的个数比5多的多,所有,实际上就是,N的阶乘里面有多少个5,那么末尾就有多少个0.<br /> <br />题目2思路:我们想想,把一个数化成原创 2010-11-21 21:52:00 · 1836 阅读 · 0 评论 -
2.1 求二进制数中1的个数
<br />编程之美:2.1<br />题目要求:求一个数的二进制表示中1的个数<br /> <br />解法1:<br />我们比较想想,我们怎么把一个数字化成二进制呢?短除法,对,每次除2,余数是1就写1,是0就写0,然后反过来,就OK了,那么解法1就出来了,每次除2,看余数,有下面的代码:<br />int count_solution_1(unsigned int n)<br />{<br /> int num = 0 ;<br /> while(n)<br /> {<br /> if(n%2 =原创 2010-11-21 20:51:00 · 611 阅读 · 0 评论 -
2.3
<br />编程之美 2.3<br />问题描述:有一个数组,里面是用户的ID,我们知道,有一个ID出现的次数超过了一半,找出这个ID<br /> <br />分析:<br />排序整个数组,然后再遍历一次,找出出现次数超过一半的ID<br />我们再想一下,如果这个数组已经排序了,那么在[N/2]那个位置的肯定是我们要找的ID。<br />上面说的,都是要排序整个数组,那么,可不可以不排序整个数组呢?书上说了一个方法:我们每次都从数组中干掉两个不同的ID,,那么,在剩下的的数组中,那个“水王”还是占据半壁原创 2010-11-22 14:25:00 · 320 阅读 · 0 评论 -
2.7 最大公约数
<br />编程之美 : 2.7最大公约数<br /> <br />这是个老问题了,很简单,是个人都会,辗转相除法<br />用f(m , n) 表示两个数m和n的最大公约数,并且m>n那么有:<br />f(m , n) = f(n , m%n)<br />好的,不难看书,递归解决问题<br /> <br />我们有下面的代码<br />int gcd_one(int m , int n)<br />{<br /> if( n ==0 )<br /> {<br /> return m ; <br />原创 2010-11-22 18:25:00 · 328 阅读 · 0 评论