poj2453解題報告

來源:互聯網
上載者:User
An Easy Problem
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 5783   Accepted: 3344

Description

As we known, data stored in the computers is in binary form. The problem we discuss now is about the positive integers and its binary form.

Given a positive integer I, you task is to find out an integer J, which is the minimum integer greater than I, and the number of '1's in whose binary form is the same as that in the binary form of I.

For example, if "78" is given, we can write out its binary form, "1001110". This binary form has 4 '1's. The minimum integer, which is greater than "1001110" and also contains 4 '1's, is "1010011", i.e. "83", so you should output "83".

Input

One integer per line, which is I (1 <= I <= 1000000).

A line containing a number "0" terminates input, and this line need not be processed.

Output

One integer per line, which is J.

Sample Input

1234780

Sample Output

245883
題目大意:求比比n大且離n最近的數,並且這個數的二進位於n二進位'1'位元相同
思路:暴力過的200多MS,這題我還有個方法,假設n的二進位為abcdefg..共S位,,,如果第i位為0並且i+1位為1 
則將第i+1位的1移到第i位上來並且將i+1~S所有的1緊密排列在尾部,算出這個數的值,輸出最小的就是結果,但
位元運算沒學過就沒寫。。。
暴力搜尋的code......FUCK
#include<iostream>using namespace std;int l(int n){int s=0;while(n){if(n%2)s++;n/=2;}return s;}int main(){int n,s;while(cin>>n&&n){s=l(n);while(1)if(s==l(++n))break;cout<<n<<endl;}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.