Чтобы получить последний ди git числа в базе 10, вы можете использовать оператор по модулю, известный как Mod
, таким образом:
1234 Mod 10 = 4
32 Mod 10 = 2
и т. Д. on.
Когда у вас есть последний di git, его по сути можно отрубить с помощью целочисленного деления:
1234 \ 10 = 123
32 \ 10 = 3
Так что теперь процесс можно повторить, чтобы получить то, что имеет стать последним ди git. Как только исходное число было уменьшено до 0, алгоритм завершил работу.
Поскольку вам не нужны цифры в каком-либо конкретном порядке, нам не нужно об этом беспокоиться.
Итак, учитывая:
Function GetDigits(n As Int64) As List(Of Int64)
Dim digits As New List(Of Int64)
While n > 0
digits.Add(n Mod 10)
n = n \ 10
End While
Return digits
End Function
Вы можете сделать:
Console.WriteLine(String.Join(" ", GetDigits(12345678900)))
, чтобы получить результат:
0 0 9 8 7 6 5 4 3 2 1
Я использовал Int64
(он же Long
) для параметра GetDigits
, чтобы вы могли использовать числа с большим количеством цифр, чем Int32
(он же Integer
) можно удерживать.
От этого вы можете:
Function AdditivePersistence(n As Int64) As Integer
Dim pers = 0
While n > 9
pers += 1
n = GetDigits(n).Sum()
End While
Return pers
End Function