diff --git a/1. problem_rl/task.md b/1. problem_rl/task.md new file mode 100644 index 0000000..8b870ea --- /dev/null +++ b/1. problem_rl/task.md @@ -0,0 +1,56 @@ +# Problem RL -- рекурсия в цикл + +Ниже приведён исходный код программы для рекурсивного алгоритма Евклида. + +**Ваша задача**: переписать его так, чтобы вместо рекурсии использовался цикл + +Посылка должна состоять из программы, считывающей со стандартного ввода два числа `x` и `y` и выводящей на стандартный вывод одно число `g` + +## Пример 1 + +| Ввод | Вывод | +| --------------- | --------------- | +| `2 1` | `1` | + +## Пример 2 + +| Ввод | Вывод | +| --------------- | --------------- | +| `3 2` | `1` | + +## Пример 3 + +| Ввод | Вывод | +| --------------- | --------------- | +| `2 4` | `2` | + +## Примечания + +```c +#include +#include +#include + +unsigned long long gcd(unsigned long long x, + unsigned long long y) { + unsigned long long q; + if (y > x) + return gcd(y, x); + assert (y > 0); + q = x % y; + if (q == 0) + return y; + return gcd(y, q); +} + +int main() { + unsigned long long x = 0, y = 0, g; + int res; + + res = scanf("%llu %llu", &x, &y); + assert(res == 2); + g = gcd(x, y); + printf("%llu\n", g); + return 0; +} +```