После каждых двух цифр вставить их сумму, если она также является цифрой. Массивы не использовать - 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"); }
Решение задачи: «После каждых двух цифр вставить их сумму, если она также является цифрой. Массивы не использовать»
#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
. После этого выводится новая строка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д