Для решения этой задачи необходимо начать с числа \( n \) и последовательно вычитать из него последнюю цифру, пока не достигнем нуля. При этом важно учитывать, что если последняя цифра равна нулю, то вычитание не выполняется, так как по условию мы должны вычитать только не нулевые последние цифры.
Давайте рассмотрим алгоритм работы решения:
- Начинаем с заданного числа \( n \).
- Определяем последнюю цифру числа \( n \) (это делается с помощью операции взятия остатка от деления на 10).
- Вычитаем эту последнюю цифру из \( n \).
- Увеличиваем счетчик взятий (вычитаний), чтобы отслеживать, сколько раз мы выполнили это действие.
- Повторяем шаги 2–4, пока \( n \) не станет равным нулю.
Пример кода на языке Java, который выполняет описанный алгоритм, приведён ниже:
import java.util.Scanner;
public class PythagoreanDream {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long n = scanner.nextLong(); // Чтение входного числа n
int count = 0; // Счетчик вычитаний
while (n > 0) {
long lastDigit = n % 10; // Получаем последнюю цифру
n -= lastDigit; // Вычитаем последнюю цифру из n
count++; // Увеличиваем счетчик
}
System.out.println(count); // Вывод результата
}
}
Объяснение кода:
- Мы используем
Scannerдля считывания вводимого числа \( n \). - Переменная
countинициализируется для отслеживания количества вычитаний. - Цикл
whileпродолжается до тех пор, пока \( n \) больше нуля. Внутри цикла:- Мы вычисляем последнюю цифру с помощью
n % 10. - Уменьшаем \( n \) на эту цифру.
- Увеличиваем счетчик
count.
- Мы вычисляем последнюю цифру с помощью
- После завершения цикла выводим результат – количество вычитаний.
Этот алгоритм работает эффективно для больших чисел до \( 10^{18} \) и дает правильный ответ в рамках заданной задачи.
