算法1
需要考虑n节点 与 m节点所在的子树 是否处在同一颗子树上面
C++ 代码
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main()
{
int m,n;
int level = 0; // m在子树的第0层
while(cin >> m >> n){
level = 0;
if(m == 0 || n == 0){
break;
}else{
int left = m; // 左子树
int right = m; // 右子树
while(left*2 <= n){
left <<= 1; // 等价于left*=2
right = (right << 1) + 1; // 等价于right = right*2 + 1
level++;
} // level 即为m节点所在子树的最深层
if(right <= n) // n节点不在m节点所在的子树上面
cout << (1LL << level) + right - left << endl;
else // n节点在m节点所在的子树上面
cout << (1LL << level) + n-left << endl;
}
}
return 0;
}