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