Матч
338, Бинарное увеличение (BinaryIncrementation)
Дивизион 2,
Уровень 1
Имеется строка, в которой
записано двоичное представление натурального числа n. Необходимо получить строку, содержащую двоичное представление
числа n + 1.
Класс: BinaryIncrementation
Метод: string plusOne(string x)
Ограничения: строка x
содержит от 1 до 30 символов ‘0’ и ‘1’, первый символ строки x равен ‘1’.
Вход. Строка, содержащая двоичное
представление натурального числа n.
Выход. Строка, содержащая двоичное представление числа n + 1.
Пример входа
x |
“10011” |
“1111” |
“1” |
Пример выхода
“10100”
“10000”
“10”
РЕШЕНИЕ
обработка строк
Проходим по строке с конца в
начало. Каждую единицу заменяем на ноль. Если встретился ноль – заменяем его на
единицу и заканчиваем обработку строки. Если исходная строка состоит из одних
единиц, то ответом будет строка, содержащая единицу и столько нулей, сколько
единиц в исходной строке.
ПРОГРАММА
#include <cstdio>
#include <string>
using namespace std;
class BinaryIncrementation
{
public:
string plusOne(string x)
{
int i;
for(i = x.size() - 1; i >= 0; i--)
{
if (x[i] == '0')
break;
x[i] = '0';
}
if (i >= 0) x[i] = '1'; else
x = string(1,'1') + x;
return x;
}
};