Все задачи
Легко Решено: 0 Процент решений: 0%

Сумма корректных чисел

Сложите элементы, которые являются целыми числами, и пропустите всё остальное, как try/except обрабатывает неверный ввод.

Чему вы научитесь

  • Пропускать неверный ввод вместо падения
  • Убирать пробелы перед превращением текста в число
  • Распознавать необязательный знак и цифры за ним

Условие

Данные, введённые людьми, часто бывают неаккуратными. Вам дан список строк, и нужно сложить те из них, которые являются целыми числами, игнорируя остальные вместо аварийного завершения.

Элемент считается подходящим, если после удаления пробелов с обеих сторон он состоит из необязательного знака + или -, за которым идёт одна или больше цифр. Всё остальное (пустой текст, десятичные дроби вроде "2.5", слова) пропускается.

Реализуйте sum_valid_numbers(values).

Ввод

values: Элементы для чтения.

Вывод

Верните сумму допустимых целых чисел (0, если таких нет).

Ограничения

0 ≤ число записей ≤ 1,000

В каждой записи не больше 20 символов; корректные числа помещаются в 64-битное целое

Примеры

Пример 1
Ввод:
values = ["10", " 5 ", "abc", "-3"]

Ожидаемый вывод:
expected = 12
Ввод:
std::vector<std::string> values = {"10", " 5 ", "abc", "-3"};

Ожидаемый вывод:
long long expected = 12;
Ввод:
string[] values = new string[] {"10", " 5 ", "abc", "-3"};

Ожидаемый вывод:
long expected = 12;

Пояснение

"10", " 5 " (пробелы обрезаются) и "-3" являются целыми числами; "abc" пропускается. 10 + 5 - 3 = 12.

Пример 2
Ввод:
values = ["2.5", "", "seven"]

Ожидаемый вывод:
expected = 0
Ввод:
std::vector<std::string> values = {"2.5", "", "seven"};

Ожидаемый вывод:
long long expected = 0;
Ввод:
string[] values = new string[] {"2.5", "", "seven"};

Ожидаемый вывод:
long expected = 0;

Пояснение

Ни один из элементов не является целым числом, поэтому сумма равна 0.

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Сначала уберите пробелы, затем решите, является ли остаток корректным целым числом.

Подсказка 2

Преобразование внутри try/except (или проверка символов) позволяет пропускать плохие записи без остановки.

Подсказка 3

Одинокий знак вроде "+" — не число.

Ожидаемая сложность

время O(общая длина), доп. память O(1)

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.