#include <iostream>
typedef long long ll;
using namespace std;
bool ll_is_valid(ll t, ll N, ll x, ll y)
{
return t / x + (t - x) / y >= N;
}
ll f(ll N, ll x, ll y)
{
ll R = 1;
while (!ll_is_valid(R,N,x,y)) R *= 2;
ll L = R / 2;
while(R - L > 1)
{
ll M = (L + R) / 2;
if (!ll_is_valid(M,N,x,y)) {L = M;}
else {R = M;}
}
return R;
}
int main()
{
ll N,x,y;
cin >> N >> x >> y;
if(x > y) swap( x, y );
cout << f(N, x, y) << std::endl;
}
а) 1001110011₂ = 115₁₀
б) 1001000₂ = 72₁₀
в) 1111100111,01₂ = 999,25₁₀
г) 1010001100,101101₂ = 652,703125₁₀
Объяснение:
В самом задании сказано, что нужно перевести значения из 2-й СС в 10-ю. Поэтому задание 1 - все буквы и задание 2 - Д,Е не подходят по условию задания, решу только, что требуется:
а) 1001110011₂ = 2⁸*0 + 2⁷*0 + 2⁶*1 + 2⁵*1 + 2⁴*1 + 2³*0 + 2²*0 + 2¹*1 + 2⁰*1 = 0 + 0 + 64 + 32 + 16 + 0 + 0 + 2 + 1 = 115₁₀
б) 1001000₂ = 2⁶*1 + 2⁵*0 + 2⁴*0 + 2³*1 + 2²*0 + 2¹*0 + 2⁰*0 = 64 + 0 + 0 + 8 + 0 + 0 + 0 = 72₁₀
в) 1111100111,01₂ = 999,25₁₀
Узнаем целую часть: 2⁹*1 + 2⁸*1 + 2⁷*1 + 2⁶*1 + 2⁵*1 + 2⁴*0 + 2³*0 + 2²*1 + 2¹*1 + 2⁰*1 = 512 + 256 + 128 + 64 + 32 + 0 + 0 + 4 + 2 + 1 = 999₁₀
Узнаем дробную часть: 01₂ = 2⁻¹*0 + 2⁻²*1 = 0.25₁₀
г) 1010001100,101101₂ = 652,703125₁₀
Узнаем целую часть: 2⁹*1 + 2⁸*0 + 2⁷*1 + 2⁶*0 + 2⁵*0 + 2⁴*0 + 2³*1 + 2²*1 + 2¹*0 + 2⁰*0 = 512 + 0 + 128 + 0 + 0 + 0 + 8 + 4 + 0 + 0 = 652₁₀
Узнаем дробную часть: 2⁻¹*1 + 2⁻²*0 + 2⁻³*1 + 2⁻⁴*1 + 2⁻⁵*0 + 2⁻⁶*1 = 0.703125₁₀