求N!二进制最低位1的位置

来源:互联网 发布:js文件怎么使用 编辑:程序博客网 时间:2024/05/21 22:40
#include<iostream>


using namespace std;
long long factorial(int N);


template<typename T>
void DemicalConversBinary(T llret);


//  判断最低位为1的情形
int lowestOne(long long);


int main(int argc, char ** argv)
{
int iCnt=18;
int iRet=0;
long long llret;

llret=factorial(iCnt);
cout<<"十进制结果: "<<llret<<endl;
DemicalConversBinary(llret);         //  十进制转换为二进制
cout<<"最低位1的位数: "<<lowestOne(llret)<<endl;


system("pause");
    return 0;
}
//  递归求阶乘
long long factorial(int iCnt)
{
if(iCnt==2)
return 1;
else
return iCnt*(factorial(iCnt-1));
}
//  十进制转换为二进制
template<typename T>
void DemicalConversBinary(T llret)
{
unsigned bitscount=sizeof(T);
cout<<"bitscount: "<<bitscount<<endl;


unsigned char* p=reinterpret_cast<unsigned char *>(&llret);
for(int i=bitscount-1;i>=0;--i)
{
for(int j=7;j>=0;--j)
*(p+i)&(1<<j)?(cout<<"1"):(cout<<"0");
if(i!=0)
cout<<",";
}
cout<<endl;
}
//  判断最低位为1的情形
int lowestOne(long long llN)
{
int iCnt=0;        //  计数
while(llN%2==0)
{
++iCnt;
llN/=2;
}
return iCnt;
}
0 0