求A,B两数之间得完美代价
时间: 2023-05-29 18:01:21 浏览: 148
求完美数的算法
对于两个自然数 $A$ 和 $B$,它们的完美代价为将它们的二进制表示写在同一行,然后从右边开始找到最后一个相同的位置,并将这个位置左边的位数相加,即为它们之间的完美代价。
例如,$A=10$,$B=15$,它们的二进制分别为 $1010$ 和 $1111$,将它们写在同一行如下:
$$
10: \quad 1\quad 0\quad 1\quad 0\\
15: \quad 1\quad 1\quad 1\quad 1
$$
可以发现,从右边开始,它们的最后一个相同的位置为第二位,因此它们之间的完美代价为 $1+0=1$。
以下是两个数字间完美代价的 C++ 代码实现:
```cpp
#include <iostream>
int perfect_cost(int A, int B) {
int ans = 0;
// 找到最右边的相同位置
while (A != B) {
A >>= 1;
B >>= 1;
ans++;
}
// 左移相同位置的位数
return A << ans;
}
int main() {
int A, B;
std::cin >> A >> B;
std::cout << perfect_cost(A, B) << std::endl;
return 0;
}
```
阅读全文