LINUX.ORG.RU

История изменений

Исправление kirk_johnson, (текущая версия) :

Какая-то отвратительная хрень. Сделай вот так:

#include <stdio.h>
#include <stdlib.h>

static struct denom {
	struct denom    *prev;
	int              base;
	int              power;
	int              n;
} start = {
        .base = 2
};

void backward(int, struct denom *);

void forward(struct denom *A)
{
	struct denom next;

	if (A->n == 1) {
		backward(1, A->prev);
		return;
	}

	while (A->n % A->base)
		A->base++;

	A->power = 0;

	do {
		A->power++;
		A->n /= A->base;
	} while ((A->n % A->base) == 0);

	next = *A;
	next.prev = A;

	forward(&next);
}

void backward(int out, struct denom *A)
{
	for (int i = 0; i <= A->power; i++) {
		if (A->prev)
			backward(out, A->prev);
		else
			printf("%d ", out);
		out *= A->base;
	}
}

int main()
{
	scanf("%d", &start.n);

	if (start.n == 1)
		printf("1 ");
        else
                forward(&start);

	exit(EXIT_SUCCESS);
}

Исходная версия kirk_johnson, :

Какая-то отвратительная хрень.