Цифровой корень: Помогите доработать код, что нужно делать дальше. - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Цифровым корнем называется число в десятичной системе счисления, полученное из цифр исходного числа путём их сложения и повторения этого процесса над полученной суммой до тех пор, пока не будет получено число, меньшее 10. Например, цифровой корень 467 равен 8. Известно, что составное число можно разложить на множители различными способами, например 24 = 2x2x2x3 = 2x3x4 = 2x2x6 = 4x6 = 3x8 = 2x12 = 24. В данном случае умножение на единицу не рассматривается. Назовём суммой цифровых корней сумму цифровых корней отдельных множителей в разложении составного числа. Например, для 24: Разложение Сумма цифровых корней 2x2x2x3 9;2x3x4 9; 2x2x6 10 ; 4x6 10 ; 3x8 11 ; 2x12 5 ; 24 6 В этом случае максимальная сумма цифровых корней равна 11. Помогите доработать код, что нужно делать дальше.
#include <stdio.h>
#include <stdlib.h>
 
int digRoot(int n);
int razl(int, int*);
 
int mnog[21];
 
int digRoot(int n)
{
    int sum;
    while (n >= 10)
    {
        sum = 0;
        while (n != 0)
        {
            sum += n % 10;
            n /= 10;
        }
        n = sum;
    }
    return n;
}
 
int razl(int n, int *arr)
{
    int d, count = 1;
    for (d = 2; d * d <= n; )
    {
        if (n % d == 0)
        {
            *arr++ = d;
            n /= d;
            count++;
        }
        else
        {
            d++;
        }
    }
    *arr = n;
    return count;
}
 
int main()
{
    printf("%d\n", digRoot(248));
    int n = razl(24, mnog), i;
    for (i = 0; i < n; i++) printf("%d ", mnog[i]);
    printf("\n");
    system("pause");
    return 0;
}

Решение задачи: «Цифровой корень: Помогите доработать код, что нужно делать дальше.»

textual
Листинг программы
#include <stdio.h>
/* ***************************************************************************
 * Цифровым корнем называется число в десятичной системе счисления, полученное
 * из цифр исходного числа путём их сложения и повторения этого процесса над
 * полученной суммой до тех пор, пока не будет получено число, меньшее 10.
 * Например, цифровой корень 467 равен 8.
 * **************************************************************************/
int root (int);
 
int main (void)
{
    int n;
    printf("n = "); scanf("%d", &n);    // получаем число с клавиатуры
 
    printf("root = %d\n", root(n));     // находим цифровой корень
    return 0;
}
/* ---------------------------- цифровой корень ------------------------ */
int root (int n)
{
    if (n<10)return n;
    else
    {
        int sum = 0;
        while (n>0)
        {
            sum += n%10;
            n /= 10;
        }
        return sum = root(sum);
    }
}

Объяснение кода листинга программы

  1. Вводится число n с клавиатуры.
  2. Число n передается в функцию root для вычисления цифрового корня.
  3. В функции root происходит проверка: если n меньше 10, то возвращается n.
  4. В противном случае, инициализируется переменная sum в 0.
  5. Затем, в цикле while происходит считывание цифр числа n (по модулю 10) и их суммирование в переменную sum.
  6. После каждой итерации цикла n делится на 10.
  7. Когда n становится равным 0, цикл завершается.
  8. Возвращается значение переменной sum, и выполняется рекурсивный вызов функции root с этим значением.
  9. Процесс повторяется до тех пор, пока не будет достигнуто число, меньшее 10.
  10. Возвращается окончательное значение цифрового корня.
  11. Выводится значение цифрового корня на экран.
  12. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы