对于两个结点x和y,假设他们到根结点的路径分别是(x1, x2, … ,1)和(y1, y2, … ,1)(这里显然有x = x1,y = y1),那么必然存在两个正整数i和j,使得从xi 和 yj开始,有xi = yj , xi + 1 = yj + 1, xi + 2 = yj + 2,… 现在的问题就是,给定x和y,要求xi(也就是yj)。如图。
![](https://i-blog.csdnimg.cn/blog_migrate/cc6f7f55536ebdae321a039c0783fb2b.png)
#include <iostream>
#include<string>
using namespace std;
int main()
{
int x,y,i=0,j=0,s=0;
cin>>x>>y;
string a[100];
string b[100];
string d;
while(x!=0){
std::string c=std::to_string(x);
a[i]=c;
i++;
x=x/2;
}//统计x结点的路径
while(y!=0){
std::string s=std::to_string(y);
b[j]=s;
j++;
y=y/2;
}//统计y结点的路径
for(int q=0;q<i;q++){
for(int t=0;t<j;t++){
if(b[t]==a[q]) {
d=b[t];
s=1;
break;
}
}//寻找第一个匹配字符
if(s==1) break;
}
cout<<d<<endl;
}