poj2453

    xiaoxiao2021-03-25  6

    题目大意:

    先把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

    最新回复(0)