先判断两个节点是否在同一层,不是的话,让下面的节点往上走,直到在同一层。如果此时已经两个节点相等,直接返回结果。否则,让两个节点同时往上走(直接让大数除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;
} 
京公网安备 11010502036488号