N!
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
-
阶乘(Factorial)是一个很有意思的函数,但是不少人都比较怕它。现在这里有一个问题,给定一个N(0<0<1000000000),求N!的二进制表示最低位的1的位置(从右向左数)。
- 输入
- 本题有多组测试数据,每组数据一个正整数N(0<0<1000000000),以EOF结束
- 输出
- 求N!的二进制表示最低位的1的位置(从右向左数)。一组数据占一行。
- 样例输入
-
1 2 3 4
- 样例输出
-
1 2 2 4
- 提示
- 2! = (2)10 = (10)2,则第一个1是第二位
3! = (6)10 = (110)2,则第一个1是第二位
4! = (24)10 = (11000)2,则第一个1是第四位 - 来源
- NOJ
- //求N!的二进制表示最低位的1的位置,也即是求N!的阶乘中有多少个质因子2,如果一个数没有质因子2,那么最低位一定为1,有多少个质因子2那么就会像左移动多少位
-
1 #include <stdio.h> 2 int main() 3 { 4 int n ; 5 while(~scanf("%d", &n)) 6 { 7 int i, sum=1 ; 8 for(i=2; i<=n; i*=2) //分解质因子 ; 9 { 10 sum += n/i ; 11 } 12 printf("%d\n", sum) ; 13 } 14 return 0 ; 15 }
时间: 2024-10-08 09:04:55