Good Number
[ Submit Code ] [ Top 20 Runs ] [ Runs Status ]
Acceteped : 1180 Submit : 2316
Time Limit : 1000 MS Memory Limit : 65536 KB
Description
Good Number
题目描述
如果一个数的(无前导0)二进制表示中数码1的个数比数码0的个数多,我们称其为"好数"。 求n位无前导0的二进制数中好数的个数。
输入
每行输入一个整数n(1≤n≤64)
输出
每行输出一个样例的结果。
样例输入
1
64
样例输出
1
4611686018427387904
Sample Input
Sample Output
Source
[ Submit Code ] [ Top 20 Runs ] [ Runs Status ]
[ Home Page ] [ Go Back ]
#include <stdio.h>
__int64 c[100][100];
int main()
{
int i,j;
c[0][0]=1;
for(i=1;i<=65;i++)
{
c[i][0]=c[i][i]=1;
for(j=1;j<i;j++)
{
c[i][j]=c[i-1][j-1]+c[i-1][j];
}
}
// for(i=1;i<=65;i++)
// {
// for(j=1;j<i;j++)
// {
// printf("%lld ",c[i][j]);
// }
// printf("\n");
// }
//
int n;
while(scanf("%d",&n)!=EOF)
{
int x=(n-1)%2;
int y=(n-1)/2;
int z=n/2;
__int64 count=0;
if(x==0) //n-1为偶数
{
for(i=y;i<=n-1;i++)
{
count=count+c[n-1][i];
}
}
else
{
for(i=z;i<=n-1;i++)
{
count=count+c[n-1][i];
}
}
printf("%lld\n",count);
}
}