题干

C++实现
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int main() {
int m, n;
while (1) {
scanf("%d%d", &m, &n);
if (m == 0 && n == 0) {
break;
}
int i = 1;
int begin_level;
int final_level;
while (1) {
if (m >= 1 << (i - 1) && m < 1 << i) {
begin_level = i;
}
if (n >= 1 << (i - 1) && n < 1 << i) {
final_level = i;
break;
}
++i;
}
int left = m;
int right = m;
for (i = begin_level; i < final_level; i++)
{
left = 2 * left;
right = 2 * right + 1;
}
int treenum;
if (left > n) {
treenum = (1 << (final_level - begin_level)) - 1;
}
else if (n < right) {
treenum = (1 << (final_level - begin_level)) - 1;
treenum += n - left + 1;
}
else {
treenum = (1 << (final_level - begin_level) + 1) - 1;
}
cout << treenum << endl;
}
return 0;
}