2120: N!
时间限制: 1 Sec 内存限制: 64 MB
题目描述
阶乘(Factorial)是一个很有意思的函数,但是不少人都比较怕它。现在这里有一个问题,给定一个N(0<0<1000000000),求N!的二进制表示最低位的1的位置(从右向左数)。
输入
本题有多组测试数据,每组数据一个正整数N(0<0<1000000000),以EOF结束
输出
求N!的二进制表示最低位的1的位置(从右向左数)。一组数据占一行。
//核心代码
int mad(int x,int y)
{
int sum=0;
if(x==0) return 0;
if(x<0) return -1;
while(x)
{
x=x/2;
sum=sum+x;
}
return sum;
}
完整代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
int num(int n)
{
if(n < 0) return -1;
if(n == 0) return 0;
int ret = 0;
while(n)
{
n=n/2;
ret += n;
}
return ret;
}
int main()
{ int a,b;
while(scanf("%d",&a)!=EOF)
{
b=num(a);
printf("%d\n",b+1);
}
}