题目大意:
先把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;
}
4673

被折叠的 条评论
为什么被折叠?



