ビット列で一致しているプレフィックスの部分はいじる必要はなさそう。
class BinaryCards { public: long long largestNumber(long long A, long long B) { for (int i = 63; 0 <= i; --i) { lli a = A & (1LL << i); lli b = B & (1LL << i); if (a != b) return A | ((1LL << (i + 1)) - 1LL); } return max(A, B); } };