-
Notifications
You must be signed in to change notification settings - Fork 0
/
digital_root.os
68 lines (54 loc) · 3.14 KB
/
digital_root.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// Текст задания (Eng): https://www.codewars.com/kata/541c8630095125aba6000c00 (6 kyu).
// Необходимо вычислить цифровой корень (digital root) заданного числа.
// Рекурсивная реализация вычисления цифрового корня числа.
Функция ЦифровойКорень(ИсходноеЧисло)
МассивЦифр = ЧислоВМассивЦифр(ИсходноеЧисло);
СуммаЦифр = 0;
Для Каждого Цифра Из МассивЦифр Цикл
СуммаЦифр = СуммаЦифр + Цифра;
КонецЦикла;
Если СуммаЦифр >= 10 Тогда
Возврат ЦифровойКорень(СуммаЦифр);
Иначе
Возврат СуммаЦифр;
КонецЕсли;
КонецФункции
// Вычисление цифрового корня через закономерность "отбрасывания девятки".
Функция ЦифровойКореньА(ИсходноеЧисло)
МассивЦифр = ЧислоВМассивЦифр(ИсходноеЧисло);
СуммаЦифр = 0;
Для Каждого Цифра Из МассивЦифр Цикл
СуммаЦифр = СуммаЦифр + Цифра;
КонецЦикла;
ЦифровойКорень = СуммаЦифр % 9;
Возврат ЦифровойКорень;
КонецФункции
// Собственное дополнение задачи: подсчитать цифровой корень массива чисел.
Функция ЦифровойКореньМассива(ИсходныйМассив)
СуммаМассива = 0;
Для Каждого Число Из ИсходныйМассив Цикл
СуммаМассива = СуммаМассива + Число;
КонецЦикла;
Возврат ЦифровойКорень(СуммаМассива);
КонецФункции
// Вспомогательная функция, преобразующая число в массив его цифр.
Функция ЧислоВМассивЦифр(Знач ИсходноеЧисло)
СтрокаЧисло = Строка(ИсходноеЧисло);
МассивЦифр = Новый Массив;
Для Индекс = 1 По СтрДлина(СтрокаЧисло) Цикл
СтрокаЦифра = Сред(СтрокаЧисло, Индекс, 1);
Попытка
МассивЦифр.Добавить(Число(СтрокаЦифра));
Исключение
КонецПопытки;
КонецЦикла;
Возврат МассивЦифр;
КонецФункции
// Проверяем работу функций.
МассивЧисел = Новый Массив;
МассивЧисел.Добавить(15);
МассивЧисел.Добавить(36);
МассивЧисел.Добавить(28);
Сообщить(ЦифровойКорень(968));
Сообщить(ЦифровойКореньА(45845));
Сообщить(ЦифровойКореньМассива(МассивЧисел));