Срочно С++
Разбей на пары
Алгоритм получает на вход натуральное число N⩾10
и строит по нему новое число R
следующим образом:
1. Все пары соседних цифр в десятичной записи N
справа налево рассматриваются как двузначные числа (возможно, с ведущим нулём).
2. Из списка полученных на предыдущем шаге двузначных чисел выделяются наибольшее и наименьшее.
3. Результатом работы алгоритма становится разность найденных на предыдущем шаге двух чисел.
Реализуйте данный алгоритм для входного числа и выведите полученную разность. Не используйте операции над строковыми данными— рассматривайте входные данные как число, а не строку. Списки (векторы) и другие контейнеры также использовать нельзя.
Формат входных данных
На вход подается одно число 10⩽N⩽1018
.
В языке С++ используйте тип данных long long.
Формат выходных данных
Выведите одно число — результат работы алгоритма.
Замечание
В первом примере у нас есть только одна пара цифр.
Во втором примере пар цифр две: 00
и 01
. Они соответствуют числам 0
и 1
.
В третьем примере число разбивается на пары 89
, 67
, 45
, 23
, 01
.
Ввод
Вывод
99
0
100
1
123456789
88
Ответы
Код решения на C++:
#include <iostream>
using namespace std;
int main() {
long long n;
cin >> n;
int prev = -1, max_num = -1, min_num = 10;
while (n >= 10) {
int d1 = n % 10;
n /= 10;
int d2 = n % 10;
if (prev != -1) {
int num = d1 * 10 + d2;
if (num > max_num) max_num = num;
if (num < min_num) min_num = num;
}
prev = d2;
}
cout << max_num - min_num << endl;
return 0;
}
Пояснение решения:
Считываем входное число n.
Инициализируем переменные prev, max_num и min_num значением -1, -1 и 10 соответственно. Переменная prev будет хранить предыдущую цифру (начально равна -1), переменная max_num будет хранить максимальное двузначное число, а min_num будет хранить минимальное двузначное число (начально равна 10).
В цикле пока n >= 10, на каждой итерации:
Получаем последнюю цифру числа n и сохраняем её в d1.
Делим n на 10 и получаем следующую цифру числа n и сохраняем её в d2.
Если это не первая итерация цикла (т.е. prev не равно -1), то формируем двузначное число из цифр prev и d1 и проверяем, является ли оно максимальным или минимальным. Если да, то соответственно обновляем переменные max_num и min_num.
Сохраняем d2 в prev.
Выводим результат — разность max_num - min_num.
Код написан на C++, потому что задача требует именно этого языка программирования. Однако, этот алгоритм легко можно реализовать и на других языках программирования.