链接:http://poj.org/problem?id=2453
这道题是找出一个数以二进制表示时第一个比他大的且二进制1的个数和他本身相等的数,朴素的算法就不讲了,主要说一下位运算的算法。
这种找1的个数相同的算法,在状态dp里会使找状态的过程变得很简单
View Code
1 #include<stdio.h> 2 int main() 3 { 4 int n; 5 int x; 6 while(scanf("%d",&n)!=EOF) 7 { 8 if(!n) 9 { 10 printf("\n"); 11 break; 12 } 13 x=n&-n;//取得最后一个1的位置 14 printf("%d\n",n+x+(n^n+x)/x/4); 15 } 16 return 0; 17 }