После каждых двух цифр вставить их сумму, если она также является цифрой. Массивы не использовать - C (СИ)

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

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

Ребят помогите написать данную прогу без массивов(После каждых двух цифр вставить их сумму, если она также является цифрой) ,ниже с массивами
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
 
int main () {
    printf ("Input the massiv of digits. To finish the input please type \"-1\".\nYour massiv: ");
    int a[100];
    scanf ("%d", &a[0]);
    int i = 1;
    if (a[0] == -1) {
        printf ("Yor massiv is empty.\n");
        system("pause");
        return 0;
    }
    if (a[0] < 0 || a[0] > 9) {
            printf ("Wrong input! a[0] is not a digit! Stopping...\n");
            system("pause");
            return 0;
    }
    while (a[i - 1] != -1) {
        scanf ("%d", &a[i]);
        if ((a[i] < 0 || a[i] > 9) && (a[i] != -1)) {
            printf ("Wrong input! a[%d] is not a digit! Stopping...\n", i);
            system("pause");
            return 0;
        }
        ++i;
    }
    int len = i;
    int j;
    for (i = 1; i < len - 1; ++i) {
        if ((a[i] + a[i - 1]) >= 0 && (a[i] + a[i - 1]) <= 9) {
            ++len;
            if (len > 200) {
                printf ("There is no enough memory. Stopping...\n");
                system("pause");
                return 0;
            }
            for (j = len - 1; j >= i + 2; --j)
                a[j] = a[j - 1];
            a[i + 1] = a[i] + a[i - 1];
        }
    }
    for (i = 0; i < len - 1; ++i)
        printf ("%d ", a[i]);
    printf ("\n");
    system("pause");
}

Решение задачи: «После каждых двух цифр вставить их сумму, если она также является цифрой. Массивы не использовать»

textual
Листинг программы
#include <stdio.h>
int rec(int a, int &l)
{
    if(a<10)
    {
        printf("%d",a);
        l++;
        return a;
    }   
    int k=a%10, n;
    n=rec(a/10, l);
    l++;
    printf("%d",k);
    if(l%2==0)
    {
        if(n+k<10)
            printf("%d", n+k);
        return 0;
    }
    return k;
}
int main () 
{
    int a, l=0;
    scanf("%d", &a);
    rec(a,l);
     printf ("\n");   
}

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

В данном коде рекурсивная функция rec принимает два аргумента: целое число a и ссылку на переменную l. Если a меньше 10, функция выводит его, увеличивает l на 1 и возвращает a. В противном случае, функция вычисляет остаток от деления a на 10 (это будет последняя цифра числа), и вызывает саму себя для числа, полученного путем деления a на 10. При этом увеличивается счетчик l на 1. Затем функция выводит последнюю цифру числа и проверяет, является ли l четным числом. Если l четное, то есть l % 2 == 0, функция проверяет, является ли сумма последней цифры числа и числа, полученного при рекурсивном вызове, меньше 10. Если это так, то функция выводит сумму этих двух чисел. Если нет, то функция просто возвращает последнюю цифру числа. В функции main создается переменная a, в которую считывается целое число с помощью функции scanf. Затем вызывается функция rec с этим числом и нулевым счетчиком l. После этого выводится новая строка.

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


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

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

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