#include<iostream>
#include <cstdio>
using namespace std;
int GetSum(int m, int n)
{
if(m > n) return 0;
if(m == n) return 1;
int l = m<<1,r = l+1;
while(l<n && r<n)
{
l = l << 1;//最左边
r = ( r << 1 )+ 1;//最右边
}
if(l > n && r > n) return l/m - 1;//n值在l,r的左边
if(l == n) return l/m;//n值等于l时
if(r == n) return l/m*2 - 1;//n值等于r时
if(r > n && l < n) return l/m - 1 + (n-l+1);//n在lr之间
}
int main()
{
int n,m;
while(cin>>m>>n)
{
if(m==0&&n==0) break;
cout<< GetSum(m,n)<<endl;
}
return 0;
}
/**************************************************************
Problem: 1113
User: hrdjmax2
Language: C++
Result: Accepted
Time:0 ms
Memory:1520 kb
****************************************************************/
九度题目1113:二叉树 2007年北京大学计算机研究生机试真题
最新推荐文章于 2018-05-14 22:26:25 发布