//没有本地的源码,就说下思路吧:使用短除法的思想,对A进行短除法直到A变成比a大的最小的数,保存每一步的余数。最后的结果就是短除法的次数+余数是1的次数+最后一次短除法得到的数-a。
vector<int>reste;
int cont=0;
int Atem=A;
while(A>a&&A/2>a){
    reste.push_back(A%2);
    A/=2;
     cont++;
}
cont+=A-a;
for(auto val:reste)
     if(val==1)
         cont++;

cout<<cont;