俺没有时间解题。不过这些都是现成算法,所以贡献几个有名的:Kernighan老大滴。The C Programming Language 上有(要不怎么是宝书嗫?):unsigned int v; // count the number of bits set in v
unsigned int c; // c accumulates the total bits set in v
for (c = 0; v; c++)
{
v &= v - 1; // clear the least significant bit set
}
32位专用:v = v - ((v >> 1) & 0x55555555); // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count
On Nov 15, 2007 4:58 AM, Llh <lin...@yahoo.cn> wrote:
时间空间的要求?
SpitFire <spit...@gmail.com > 写道:计算出正整数N二进制1的个数
--
SpitFire
@yahoo.cn 新域名、无限量,快来抢注!
--
反者道之动,弱者道之用
m...@seaskysh.com
longsh...@gmail.com
http://blog.csdn.net/longshanks/
不禁让我想起来了 哥德尔不完备性原理
On 11/16/07, 莫华枫 <longsh...@gmail.com> wrote:
问题是,对于一个不知道异或的那四个关键性质的人来说。他又怎么会想到异或上去呢?
这类问题的特点就是与既有知识的挂钩非常紧密。并非可以通过系统化思维过程来逐步逼近(并在逼近的过程中根据需要查阅新知识)解的。
然而,在已经知道了第一种情况的解决方案之后,当问题扩展到第二种情况(即有两个数只出现一次时),就体现出思维的能力了,也就是打击人的地方了。
比如有时候死也想不出一道题,但是睡一觉之后就突然想出答案。碰到这种情况,我也不禁怀疑自己,到底自己真的想得出这个问题吗?