Я ищу способ рекурсивного умножения цифр двух чисел (не обязательно одинаковой длины) без использования циклов следующим образом:
скажем, числа 123 и 567. Я пытаюсь выяснить способ печати:
5
6
7
10
12
14
15
18
21
это самая левая цифра первого числа, умноженная на каждую цифру второго числа, начинающуюся слева и двигающуюся как в самом правом.
функция должна соответствовать прототипу:
void multi(int a, int b);
Мне удалось рекурсивно нырнуть до 1 и 5 оттуда до 1 56, а затем до 1 567, и при каждом вызове я печатаю результат% 10 * b% 10.
но при возврате к 12 567 функция снова возвращается к 1 567.
вот моя лучшая попытка:
int main()
{
int a, b;
scanf("%d %d", &a, &b);
multi(a, b);
return 0;
}
void multi(int a, int b)
{
if (a == 0)
return;
multi(a / 10, b);
if(b /10 != 0)
multi(a, b / 10);
printf("%d\n", a % 10 * b % 10);
}
список ограничений:
no loops
single function
mandatory prototype