You плохо разработан. Он не с отступом, вы используете имена переменных index
, indx
и idex
, что сбивает с толку читателя и приведет к кошмарам для долгосрочного обслуживания. Также факториальное вычисление заслуживает того, чтобы функционировать для лучшей модульности.
Но кроме того, ваша программа делает то, что вы просите, правильно вычисляет факториалы и добавляет их в переменную accumulator
. Единственная проблема заключается в том, что вы никогда не печатаете этот аккумулятор, за исключением последних двух случаев (2 и 1), где n = n!
.
Просто замените:
if (accumulator == indx)
{
printf("\n%d\n", indx);
}
с
printf("\n%d\n", accumulator);
, и вы увидите результаты.
Если вы хотите сохранить сумму факториалов в массиве, вы просто должны объявить int sumOfFact[26] = {0};
непосредственно перед int individualDigit[50];
определить массив и инициализировать sumOfFact[0]
1, а затем добавить sumOfFact[indx] = accumulator;
только перед печатью аккумулятора.
Чтобы поместить факториал в функцию, это довольно просто. Сначала объявим его выше ваш главный:
int ffact(int n);
Определить его где-нибудь в коде (в конечном счете, в другой единице компиляции - файл .c - если вы хотите)
inf ffact(int n) {
fact = 1;
while (n > 1) {
fact *= n--;
/* if (fact < 0) { fprintf(stderr, "Overflow in ffact(%d)\n", n); return 0; } */
}
return fact
}
Я закомментирована испытания для переполнение, потому что я предполагаю, что вы используете по крайней мере 32 бита Int и факт (9) не будет переполнения (но факт (13) будет ...)
цикл вычисления суммы факториалов становится:
accumulator = 0;
for (arrayIndx = 0; arrayIndx < length; arrayIndx++)
{
accumulator += ffact(individualDigit[arrayIndx]);
}
printf("\n%d\n", accumulator);
Преимущества для этой модульности: проще проверить код для ffact. Поэтому, когда что-то идет не так, вам не нужно сканировать один простой кусок кода из более чем 40 строк (не считая отсутствующих, но необходимых комментариев). И код больше не мешает массиву individualDigit
.
Вы должны действительно рассмотреть отступы своего кода. – Rohcana
Почему вы печатаете накопленное значение только в том случае, если 'accumulator == indx'? В чем причина этого состояния? Почему бы просто не напечатать «аккумулятор» безоговорочно? –
Я делаю это, чтобы увидеть, действительно ли это добавляет значения из факториала. –