题目大意:
先把n翻成二进制数,然后统计其中1的个数,求出(枚举)与他一样的1的个数,且比他大的最小的数
解题思路:
无
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
int main()
{
int n;
char bi[
100];
while(
scanf(
"%d",&n)&&n)
{
memset(bi,
'0',
sizeof(bi));
int i=
0,temp=n,count=
0;
while(temp!=
0)
{
bi[i]=temp%
2+
'0';
if(bi[i]==
'1') count++;
temp/=
2;
i++;
}
int l=i,num=
0;
int k=
0;
while(bi[k]==
'0') k++;
while(bi[k]==
'1')
{k++;num++;}
bi[k]=
'1';
int mark=k;
for(
int i=
0;i<num-
1;i++)
bi[i]=
'1';
for(
int i=num-
1;i<mark;i++)
bi[i]=
'0';
int sum=
0,tmp=
1;
for(
int i=
0;i<=l;i++)
{
sum=sum+(bi[i]-
'0')*tmp;
tmp*=
2;
}
printf(
"%d\n",sum);
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-200266.html