计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48 分类: C/C++ [转]计算一个无符整数中1Bit的个数(1)   Count the number of bits that are on in an unsigned integer(计算一个无符整数中1Bit的个数)-- (1) 计算一个无符号整数中有多少的Bit为1 这是一个经常遇到的经典问题,这里分两个部分讲解和总结,首先对讲解现有的算法,然后再讲解一些改进算法. 1.循环法(Iterated Count…
[问题]求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数). [思路]只写一个思路简单而暴力,我们首先使用一个函数去统计每一个数中1的个数,然后,我们遍历1到n的每个数,然后将所有1的统计数量相加,即可得到结果!其他思路都太绕了,也有人将…
之前也写过一篇这样的文章,但是隔了这么久,竟然忘了.还是要有清晰的思路,才能真正的掌握. 这道题是这样的: 给出两个非负32位整型范围内的数a,b,请输出闭区间[a,b]内所有数二进制中各个位的1的总个数. 分析:为的是求2进制中1的个数.从0-15的二进制如下: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 第一位的1,每隔2就出现.第二位的1,每隔4出现2次.第三位的1,每隔8出…
为了依次求个位,十位,百位中1的个数,我们可以把这个数字分为三部分,高位数字,当前位数字,低位数字. 如果当前位为0,那么此位为1的数目与高位数字有关 如果当前位为1,那么此位为1的数目与高位和地位都有关 如果当前位其他,那么此位为1的数目与高位数字有关 具体规律看源代码 #include <iostream> using namespace std; int main() { int N; cin >> N; int factor = 1; int count = 0; whil…
一道算法面试题:如何以最快的速度计算出一个二进制数中1的个数? [问题点数:10分,结帖人weicai_chen] 收藏 weicai_chen weicai_chen 等级: 结帖率:95.12% 楼主 发表于: 2007-06-26 22:51:44   如何以最快的速度计算出一个二进制数中1的个数?假设这个二进制数位数可以很长,比如有100位以上或更多... 大家说说自己的想法. 更多 0 分享到: 相关主题推荐: 二进制 面试题 算法 对我有用[0] 丢个板砖[0] 引用 | 举报 |…
问题描述: 输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11,12,1一共出现了5次. 思路:(不考虑时间效率的解法,肯定不是面试官期望的) 直观想法:累加1到n中每个整数中1出现的次数. 每个整数中1出现的次数可以由除以10和模10来计算得到. 代码如下: boolean invalidInput = false; //不考虑时间效率的解法 public int NumberOf1Between1AndN_Soluti…
[面试题032]从1到n整数中1出现的次数 题目:     输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.     例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1出现了5次.   思路一:     对每一个数字做判断,把1出现的数字累加.     可以通过对10取余,判断这个数字个位上的数字是不是等于1,然后这把这个数字除以10,相当于是10进制下面的向右边移动了一位.       如果输入数字为n,n有logn位,那么我们要判断每一位是不是1,那么它…
最近在看<剑指Offer>,面试题32的题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1.10.11和12,1一共出现了5次. 对于书中说的不考虑时间效率的解法很好理解,可以直接完成,但是对于书中介绍的另一种方法,没有理解,于是按照自己的思路进行了分析. 1位数,1-9中,1一共出现了1次: 2位数,10-99中,10-19的十位上一共出现了10*1=10次,对于每个十位开头的数字10-19.20-29,每个数个位上出现的…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 思路 如果是从头到尾遍历(n次),对每一个数字都计算其1的个数(lgn次),则时间复杂度为O(nlogn),运算效率太低.因此必须总结规律,提高效率. 总结规律如下(思路比<剑指OFFER>一书简单): 对于…
// 面试题43:从1到n整数中1出现的次数 // 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如 // 输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. #include <iostream> #include <cstring> #include <cstdlib> // ====================方法一==================== //逐个判断,时间复杂度为O(nlogn)…