第1章 游戏之乐----游戏中碰到的题目
第2章 数学之魅----数字中的技巧
2.2 不要被阶乘吓倒
问题2:求N!的二进制表示中最低位1的位置。
方法一:一个数字k如果乘以2,则其二进制就会左移一位。那么N!的质因子分解中的2的个数就是N!的二进制中有多少个后缀零。具体实现与N!后缀零一样。
1 int lowestOne(int N) 2 { 3 int ans=0; 4 while(N) 5 { 6 N>>=1; 7 ans+=N; 8 } 9 return ans+1;//由于求的是后缀0的个数,所以最后一个1应该是ans+1 10 }
实现
方法二:答案为N!减去其二进制表示中含1的个数。比如 11011-1-1-1-1=(10000-1)+(1000-1)+(10-1)+(1-1)=1111+111+1=1101+110+11+1。需观察规律。
第3章 结构之法----字符串及链表的探索
第4章 数学之趣----数学游戏的乐趣
时间: 2024-10-24 00:08:06