Страница 1 из 1

Длинная арифметика

Добавлено: 30 май 2009, 12:18
Horita
Собственно надо было реализовать задачу на C.

"Имеется лестница, состоящая из N ступенек. При подъеме по лестнице заяц может прыгать на любое количество ступенек от 1 до K. Сколько у зайца способов подъема по лестнице?
Ввод из файла INPUT.TXT. Единственная строка содержит целые положительные числа N и K."
С ограничение 0 < N < 35.

Ну, как мне казалось я разобралась с задачей, но серьезно ошиблась, когда дело дошло до проверки. При заданных N=35 и K=7+(до 35) у меня получается слишком длинное число.

Код: Выделить всё

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

int n, k, ch, ways, w, i, j;

//Процедура подсчета путей зайца
int findways(int n, int k)
{
	int *s = (int *)calloc(n + 1, sizeof(int));

    //заполняем массив нулями
	memset(s, 0, n + 1);

	//начальные случаи
	s[0] = 1;
	s[1] = 1;

	if (k <= 1 || n <= 0)
		return 1;
	else
		for (i = 2; i < n + 1; i++)
            /* количество путей для данного i равно сумме количеств путей
            для k предыдущих i или для всех i, если i - k < 0 */
            for ((i - k < 0) ? (j = 0) : (j = i - k); j < i; j++)
            s[i] += s[j];

	ways = s[n];
	free(s);

    if (ways > 100)
    {
        w = getc(ways)

	return ways;
}

int main(void)
{
	//Создание и проверка на существование файлов
	FILE *IFile, *OFile;
	if((IFile = fopen("Input.txt", "r")) == NULL)
	{
		printf("Can't open Input file.\n");
		return 1;
	}
	if((OFile = fopen("Output.txt", "w")) == NULL)
	{
		printf("Can't open Output file.\n");
		return 1;
	}

    //Считывание значений из файла
    fscanf(IFile, "%d %d", &n, &k);

    if (n > 35)
    {
        printf("not correct n \n");
        fprintf(OFile, "not correct n");
    }
    else
    {
        //Запись получившегося значения путей в файл и закрытие файлов
        fprintf(OFile, "%d", findways(n, k));
    }
    fclose(IFile);
    fclose(OFile);

    return 0;
}
Не могли бы вы мне помочь с длинной арифметикой к данной программе.

Пример: N=35 K=7 Output: -1886316324

Re: Длинная арифметика

Добавлено: 30 май 2009, 14:28
Naeel Maqsudov
если 32-битного int Вам не хватает, попробуйте int64

Re: Длинная арифметика

Добавлено: 30 май 2009, 15:57
Horita
Я то конечно могу попробывать, но врядли преподаватель такое примет :)