69,373
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<conio.h>
long long a[64];
void init()
{
long long pwOf2;
long long i;
a[0] = 0;
for (i = 1, pwOf2 = 1; i <= 63; i++, pwOf2 *= 2)
{
a[i] = a[i-1] * 2 + pwOf2;
}
}
int GetArrayIndex(long long x)
{
int i = 0;
x >>= 1;
while ( x!=0)
{
x >>= 1;
i++;
}
return i;
}
long long GetOnes(long long x)
{
if (x == 0)
return 0;
if (x == 1)
return 1;
else
{
int index = GetArrayIndex(x);
long long near2 = (long long)1 << index;
return a[index] + (x - near2 + 1) + GetOnes(x - near2);
}
}
int main()
{
printf("%d\n", GetOnes(5));
printf("%d\n", GetOnes(1164));
printf("%d\n", GetOnes(20071010));
getch();
return 0;
}
#include<stdio.h>
#include<math.h>
int number(__int64 a)
{
int s=0;
while(a!=0)
{
a=a>>1;
s++;
}
return s;
}
int num(__int64 a)
{
int s=0;
while(a)
{
a/=10;
s++;
};
return s;
}
int main()
{
__int64 a,b,t,v,s[2];
int i,j,k=1;
while(scanf("%I64d",&a)&&a!=-1)
{
printf("Case %d:\n",k++);
if(a==0)
{
printf("0\n");
continue;
}
s[0]=0;
s[1]=0;
j=number(a);
for(i=1;i<=j;i++)
{
t=(a+1)%(__int64)pow(2,i);
v=t>(__int64)pow(2,i-1)?t-(__int64)pow(2,i-1):0;
b=(a+1)/(__int64)pow(2,i)*(__int64)pow(2,i-1)+v;
s[0]+=b/(__int64)pow(10,12);
s[1]+=b%(__int64)pow(10,12);
s[0]+=s[1]/(__int64)pow(10,12);
s[1]%=(__int64)pow(10,12);
}
if(s[0]!=0)
{
printf("%I64d",s[0]);
i=num(s[1]);
for(j=0;j<12-i;j++)
printf("0");
}
printf("%I64d\n",s[1]);
}
return 0;
}
int main()
{
__int64 a,s,t,v;
int i,j,k=1;
a = 0x1000000000000000;
{
s=0;
j=number(a);
for(i=1;i<=j;i++)
{
t=(a+1)%(__int64)pow(2,i);
v=t>(__int64)pow(2,i-1)?t-(__int64)pow(2,i-1):0;
s+=(a+1)/(__int64)pow(2,i)*(__int64)pow(2,i-1)+v;
}
printf("Case %d:\n%I64d\n",k++,s);
}
return 0;
}
#include<stdio.h>
#include<math.h>
int number(__int64 a)
{
int s=0;
while(a!=0)
{
a=a>>1;
s++;
}
return s;
}
int main()
{
__int64 a,s,t,v;
int i,j,k=1;
while(scanf("%I64d",&a)&&a!=-1)
{
s=0;
j=number(a);
for(i=1;i<=j;i++)
{
t=(a+1)%(__int64)pow(2,i);
v=t>(__int64)pow(2,i-1)?t-(__int64)pow(2,i-1):0;
s+=(a+1)/(__int64)pow(2,i)*(__int64)pow(2,i-1)+v;
}
printf("Case %d:\n%I64d\n",k++,s);
}
return 0;
}
#include<stdio.h>
#include<conio.h>
__int64 a[64];
void init()
{
__int64 pwOf2;
__int64 i;
a[0] = 0;
for (i = 1, pwOf2 = 1; i <= 63; i++, pwOf2 *= 2)
{
a[i] = a[i-1] * 2 + pwOf2;
}
}
int GetArrayIndex(__int64 x)
{
int i = 0;
x >>= 1;
while ( x!=0)
{
x >>= 1;
i++;
}
return i;
}
__int64 GetOnes(__int64 x)
{
if (x == 0)
return 0;
if (x == 1)
return 1;
else
{
int index = GetArrayIndex(x);
__int64 near2 = (__int64)1 << index;
return a[index] + (x - near2 + 1) + GetOnes(x - near2);
}
}
int main()
{
init();
printf("%d\n", GetOnes(5));
printf("%d\n", GetOnes(1164));
printf("%d\n", GetOnes(20071010));
printf("%I64d\n",GetOnes(123456789123456789));
getch();
return 0;
}
void main()
{
init();
printf("%d\n", GetOnes(5));
printf("%d\n", GetOnes(1164));
printf("%d\n", GetOnes(20071010));
}
long long a[64];
void init()
{
long long pwOf2;
long long i;
a[0] = 0;
for (i = 1, pwOf2 = 1; i <= 63; i++, pwOf2 *= 2)
{
a[i] = a[i-1] * 2 + pwOf2;
}
}
int GetArrayIndex(long long x)
{
int i = 0;
x >>= 1;
while ( x!=0)
{
x >>= 1;
i++;
}
return i;
}
long long GetOnes(long long x)
{
if (x == 0)
return 0;
if (x == 1)
return 1;
else
{
int index = GetArrayIndex(x);
long long near2 = (long long)1 << index;
return a[index] + (x - near2 + 1) + GetOnes(x - near2);
}
}
#include <windows.h>
void main()
{
printf("%d\n", GetOnes(5));
printf("%d\n", GetOnes(1164));
printf("%d\n", GetOnes(20071010));
}