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;}