首页 > 试题广场 >

有关阶乘的两个问题

[编程题]有关阶乘的两个问题
  • 热度指数:793 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个非负整数N,如果用二进制数表达N!的结果,返回最低位的1在哪个位置上,认为最右的位置为位置0。


输入描述:
第一行一个整数N。


输出描述:
输出一个整数表示答案
示例1

输入

1

输出

0

说明

1! = 1,最低位的1在0位置上
示例2

输入

2

输出

1

说明

2 != 2,最低位的1在1位置上
示例3

输入

1000000000

输出

999999987

备注:
#include <bits/stdc++.h>
using namespace std;

int main(){
    long long s = 0;
    long n;
    cin>>n;
    while(n){
        s += (n>>1);
        n >>= 1;
    }
    cout<<s<<endl;
    return 0;
}

发表于 2020-05-09 02:08:14 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n,res=0;
    cin>>n;
    while(n){
        res+=(n>>1);
        n>>=1;
    }
    cout<<res<<endl;
    return 0;
}

发表于 2019-09-02 21:13:01 回复(0)
求N!的二进制表示中最低位1的位置,其实就是求N!中有多个因子2.
public long Count(long N)
{
	long sum=0;
	while(N)
	{
		sum+=N/2; 
		N=N/2; //或者N=N>>1;
	}
	return sum;
}


编辑于 2020-03-25 20:02:45 回复(2)

问题信息

上传者:小小
难度:
3条回答 2904浏览

热门推荐

通过挑战的用户

查看代码