0
点赞
收藏
分享

微信扫一扫

NYOJ--954 N!


N!


1000 ms  |  内存限制: 65535


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是第四位


#include<iostream>
using namespace std;
int main()
{

int T,count;
while(cin>>T)
{
count=1;
while(T)
{
count+=(T>>=1);
}
cout<<count<<endl;
}
return



按位与操作,求N!的二进制表示最低位的1的位置,也即是求N!的阶乘中有多少个质因子2,如果一个数没有质因子2,那么最低位一定为1,有多少个质因子2那么就会像左移动多少位,



举报

相关推荐

0 条评论