先判断两个节点是否在同一层,不是的话,让下面的节点往上走,直到在同一层。如果此时已经两个节点相等,直接返回结果。否则,让两个节点同时往上走(直接让大数除2)直到相遇。

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int x , y;
    while(scanf("%d%d",&x,&y) != EOF){
        while(x != y){
            if(x < y){
                y >>= 1;
            }else{
                x >>= 1;
            }
        }
        printf("%d\n",x);
    }
    return 0;   
}