Число в двоичной системе счисления выглядит как единица и n нулей за ней.
То есть у числа ровно 1533 значащих нуля, а у числа их ровно 1022.
Разница же таких чисел порождает единицы между первыми единицами изначальных чисел. Например, . Появилось 5-3 = 2 единицы и осталось 3 (от последнего числа) значащих нуля.
Зная это, мы можем разобраться, сколько значащих нулей в загаданном числе.
даёт нам 1022 значащих 0 и 511 единиц перед ними.
даёт нам 9 значащих 0 и 502 единицы перед ними.
даёт нам 0 значащих 0 и 1 единицу перед ними (просто единица).
Теперь сложение.
Начинаем с самых больших разрядов. Понижаясь, вычитаем количество образовавшихся в середине единиц.
using System;namespace ThisAnswerIsNotMine { class Program { private static int a; private static int b; private static int c; private static int d; private static void Main() { int.TryParse(Console.ReadLine()!, out a); int.TryParse(Console.ReadLine()!, out b); int.TryParse(Console.ReadLine()!, out c); int.TryParse(Console.ReadLine()!, out d); Console.WriteLine((a / c) * (b / d) >= (b / c) * (a / d) ? "Широкая" : "Узкая"); } }}
Число в двоичной системе счисления выглядит как единица и n нулей за ней.
То есть у числа ровно 1533 значащих нуля, а у числа их ровно 1022.
Разница же таких чисел порождает единицы между первыми единицами изначальных чисел. Например, . Появилось 5-3 = 2 единицы и осталось 3 (от последнего числа) значащих нуля.
Зная это, мы можем разобраться, сколько значащих нулей в загаданном числе.
даёт нам 1022 значащих 0 и 511 единиц перед ними.
даёт нам 9 значащих 0 и 502 единицы перед ними.
даёт нам 0 значащих 0 и 1 единицу перед ними (просто единица).
Теперь сложение.
Начинаем с самых больших разрядов. Понижаясь, вычитаем количество образовавшихся в середине единиц.
1022 - 502 - 1 = 519 - ответ.
Код:
using System;namespace ThisAnswerIsNotMine { class Program { private static int a; private static int b; private static int c; private static int d; private static void Main() { int.TryParse(Console.ReadLine()!, out a); int.TryParse(Console.ReadLine()!, out b); int.TryParse(Console.ReadLine()!, out c); int.TryParse(Console.ReadLine()!, out d); Console.WriteLine((a / c) * (b / d) >= (b / c) * (a / d) ? "Широкая" : "Узкая"); } }}