摘要:
题目:给定一个整数N,那么N的阶乘N!末尾有多少个零呢?末尾有几个零?如果我们从哪些数相乘可以的出10,这个角度来解决这个问题,这就会变成简单。对质因数进行分解由于10=2*5,即每一对2和5就可以产生一个10,如果我们求出N!中,2和5的分别的次方数,假设为X,Z,取决于两个数中最小的那个数,于是有公式,M=min(X,Z),M为零的个数,由于在阶乘中,2出现的概率比5的高,所以公式M=Z所以解法一:算法比较简单,就是直接计算阶乘的里面的每一个元素包含5的个数public static int countZeroNum1(int N){int num = 0;for (int i = 1; 阅读全文
摘要:
给定两个正整数A和B,把A变成B需要几位?也就是说A和B之间的位数有多少个是不同的?本文的解决思路来自于互联网和一些自己的理解:编程语言为:Java首先求出两个数有多少个位数是相同的,即求出A和B的交集其次,求出A和B一共在占了几位在同一个数中,即求出A和B的或运算再次,对上面的结果进行异或,原理就是在A和B一共所占的位数(或运算)减去相同的(交运算)然后在对得出的结果进行二进制1计数,详情可以看我上一篇的文章public static int countDifferent(int a, int b) {int value = (a&b)^(a|b);return count2(val 阅读全文
摘要:
题目:求二进制中1的个数实现这个题目的方式有很多,求余的那种方法不在这里描述方法一:对value中的数和00000001相与,当最低位为1时,相与为1,因此num+=1,最低位为0时,num+=0, 然后每次右移一位,重复进行操作,直至整个value为0时跳出循环,返回计数值缺点:程序主要是计算二进制中一的个数,这个程序把零的操作也计算进去了public static int count1(int value) {int num = 0;while(value > 0) {num += value & 0x01;value >>=1;}return num;}方法二: 阅读全文