#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;
}
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;
}