摘要: 来自《编程之美》的关于阶乘的题目: 1.给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N = 10, N! = 3628800,N!的末尾有两个0 2.求N!的二进制表示中最低位1的位置。这两道题的解法类似,先分析第二道题。 要求得N!的二进制表示中最低位1的位置,可将N!循环右移,直到无法被2整除为止,右移的次数即为最低位1之前0的个数,因此最低位1的位置就等于(右移次数 + 1)。 即若N = 0011(3),则 N! = 0110(6),那么N! / 2 = 0011奇数,无法继续被2整除,因此N!可右移一次,最低位1的位置等于 1 + 1 = 2(第二位) 所以该问... 阅读全文
posted @ 2012-10-04 18:13 糙哥 阅读(335) 评论(0) 推荐(0) 编辑