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

该博客介绍了如何计算一个整数N的阶乘在二进制表示下,其最低位1的位置。通过递归计算阶乘,然后将十进制结果转换为二进制,并使用一个辅助函数找到最低位为1的位数。示例展示了当N等于18时,阶乘的二进制表示及最低位1的位数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值