#include<stdio.h> int Jds(int m,int n) { int l,r,sum; l=r=m;//左=右=m for(sum=2;r*2+1<=n;) { sum=sum*2; l=l*2; r=r*2+1; } l=l*2;//找到最左边和最右边 if(l<=n)//如果最左边后面还有数,则加上去 sum=sum+n-l+1; printf("%d\n",sum-1); return 0; } int main() { int m,n; while(scanf("%d%d",&m,&n)!=EOF)//最后一个节点是n { if(m==0&&n==0) break; Jds(m,n); } return 0; } /************************************************************** Problem: 2190 User: admin Language: C Result: Accepted Time:15 ms Memory:1144 kb ****************************************************************/