Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 17.03.2019
Сообщений: 44

Нахождение цифрового корня

26.01.2020, 14:41. Показов 5358. Ответов 8

Студворк — интернет-сервис помощи студентам
Задачка из олимпа, что не так? не судите меня я тока начинаю

Вопрос:
Как вы знаете, для удостоверения лицензионности ПО используются серийные номера и регистрационные ключи. Вами, как ведущими разработчиками систем верификации лицензионности ПО была разработана идея надежнейшей в своём роде системы. Основывается она на цифровых корнях чисел. Теперь вам требуется написать программу, определяющую цифровой корень данного числа.
Для произвольного числа цифровой корень определяется следующим образом:
1. Если сумма цифр числа меньше десяти, то цифровой корень и есть сумма цифр этого числа.
2. В противным случае цифровой корень числа равен цифровому корню суммы его цифр.

Входные данные
Единственное число n (0 ≤ n ≤ 231- 1).
123

Выходные данные
Вывести цифровой корень числа n.
6

Мой код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
         Scanner sc = new Scanner(System.in);
          int n=sc.nextInt();
          int sum=0;
          double res=n;
            while(n>0){
                  sum=sum+n%10;
                  n=n/10;                 
              }
          if(sum>0 && sum<10){              
              System.out.println(sum);
          }
          if(sum>=10){
              res=Math.sqrt(res);
              System.out.println(res);                      
           }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.01.2020, 14:41
Ответы с готовыми решениями:

Нахождение цифрового корня
Помогите плиз написать решение нахождения этого цифрового корня, а то я новичок в прологе и с синтаксисом не очень дружу, а тут нужно уже...

Нахождение цифрового корня числа
Требуется составить программу для нахождения цифрового корня числа. Цифровой корень данного числа получается следующим образом: все цифры...

Нахождение цифрового корня натурального числа
Составить программу нахождения цифрового корня натурального числа. Цифровой корень получают следующим образом. Складываем все цифры этого...

8
Модератор
Эксперт Java
 Аватар для alecss131
2841 / 1350 / 403
Регистрация: 11.08.2017
Сообщений: 4,307
Записей в блоге: 2
26.01.2020, 15:15
Лучший ответ Сообщение было отмечено Dado5 как решение

Решение

Нужна рекурсия.
Вот пример выполнения
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args) {
        try (Scanner sc = new Scanner(System.in)) {
            int n=sc.nextInt();
            if (n>= 0 && n <= 230)
                System.out.println(root(n));
            else
                System.out.println("error");
        }
    }
    
    private static int root(int in) {
        int sum = 0;
        int tmp = in;
        while (tmp > 0) {
            sum += tmp%10;
            tmp = tmp/10;
        }
        if (sum >= 10)
            sum = root(sum);
        return sum;
    }
3
2 / 1 / 1
Регистрация: 04.06.2015
Сообщений: 36
26.01.2020, 21:47
Лучший ответ Сообщение было отмечено Dado5 как решение

Решение

Java
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
public class Examples {
    
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int a =0,b=0,c=0;
        int d=0;
        int length = s.length();
        int number = Integer.parseInt(s);
        switch(length){
            case 1:
                d = number;
            case 2:
                a = number/10;
                b = number%10;
                d = a+b;
            case 3:
                a = number/100;
                b = (number%100)/10;
                c = (number%100)%10;
                d = a+b+c;
        }       
        if(d<10){
            System.out.println(d);
        }else{
            int e = d/10;
            int f = d%10;
            System.out.println(e+f);
        }
        
    }
}
Если я правильно понял задачу то вот по простому

Добавлено через 1 час 18 минут
Вот еще вариант

Java
1
2
3
4
5
6
7
8
9
10
public class Examples {
    
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine().strip();
        int d = Stream.of(s.split("")).mapToInt(e->Integer.parseInt(e)).sum();
        System.out.println((d<10)? d:(d/10+d%10));
       }
    }
Добавлено через 1 час 17 минут
1
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
27.01.2020, 08:51
Dado5,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Helper {
 
    public static void main(String[] args) {
        printNumRootOfString("1 38", 10);
        printNumRootOfString("1-3-8", 10);
    }
 
    static void printNumRootOfString(String numAsStr, int fixNum) {
        Long tmp = (long)numAsStr.chars().filter(Character::isDigit).map(e -> e - '0').sum();
        if (tmp < fixNum) {
            System.out.println(tmp);
            return;
        }
        printNumRootOfString(tmp.toString(), fixNum);
    }
}
1
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
27.01.2020, 11:24
Цитата Сообщение от Dado5 Посмотреть сообщение
В противным случае цифровой корень числа равен цифровому корню суммы его цифр.
ЦИФРОВОМУ КОРНЮ, а не квадратному!

Т.е. если сумма цифр не меньше 10, то от этой суммы находим сумму цифр и снова проверяем, не является ли она не меньше 10 и т.д. пока на некотором шаге не получим сумму меньшую 10, это и есть искомый цифровой корень.
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,306
27.01.2020, 12:09
Dado5,

Java
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
public class Start {
    public static void main(final String[] args) {
        String input = "1d2-3*8e9w";
        String tmp = "";
        boolean toDo = true;
        int sum = 0;
        int sumAux = 0;
 
        while (toDo) {
            for (char ch : input.toCharArray()) {
                if (Character.isDigit(ch)) {
                    sum += ch - '0';
                    tmp += ch;
                }
            }
 
            if ((sum < 10) || (sumAux == sum)) {
                toDo = false;
            }
            else {
                input = tmp;
                tmp = "";
                sumAux = sum;
                sum = 0;
            }
        }
 
        System.out.println("Нахождение цифрового корня: " + sum);
    }
}
Цитата Сообщение от alecss131 Посмотреть сообщение
Нужна рекурсия.
Всё, что можно сделать рекурсией, можно и циклам. Иногда рекурсия просто удобнее, и то зависит от аппетитов содержимого.
1
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
27.01.2020, 12:14

Не по теме:

Цитата Сообщение от Kukstyler Посмотреть сообщение
Всё, что можно сделать
гвоздями, можно сделать и без оных))

0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,306
27.01.2020, 12:19
Цитата Сообщение от Aviz__ Посмотреть сообщение
гвоздями
+1

Тут важно, на мой взгляд, слово "нужна", ибо ТС может подумать, что без неё никак.
Можно с рекурсией? Да! Нужно? Не факт (в данном случае ИМХО никакой необходимости).
0
27.01.2020, 12:29

Не по теме:

Цитата Сообщение от Kukstyler Посмотреть сообщение
на мой взгляд
ну, дружище, это уже взглядами мериться((. полагаю, ТСу, в пятом классе Томской губерни, совершенно все равно. думаю, что ошибаюсь, но ему важны понты, что на Олимпике он тусит((

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.01.2020, 12:29
Помогаю со студенческими работами здесь

Нахождение цифрового корня натурального числа
Написать рекурсивную функцию нахождения цифрового корня натурального числа. Цифровой корень данного числа получается ...

Функции. Нахождение цифрового корня числа. Рекурсия
Нужно написать две программы, которые находят цифровой корень числа. Первая программа должна находить его с помощью циклов, а вторая через...

Рекурсия: нахождение цифрового корня натурального числа
Написать рекурсивную функцию нахождения цифрового корня натурального числа. Цифровой корень данного числа получается следующим образом....

Нахождение цифрового корня заданного числа (оптимизировать код)
Здравствуйте! Вот интересная задачка на циклы. Но во многих тестах по времени не проходит...Что я делаю не так?:( Условие: ...

Рекурсия: вычисление цифрового корня
Ваша задача — написать функцию вычисления цифрового корня. Цифровой корень числа nn получается следующим образом: сложим все цифры числа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru