Язык Visual C++ 6.0 Факториал Задача. Найти 100! 52.5.1. Используя алгоритм вычисления функции факториал n в качестве вспомогательного, напишите алгоритм вычисления суммы факториалов всех чётных чисел от 2 до 100. */ void CP52View::OnDraw (CDC *pDC) { CP52Doc *pdoc = GetDocument (); ASSERT_VALID (pdoc); int a [200], b [200]; // Место для хранения числа. // В каждом элементе массива хранится 1 цифра. int d; // число цифр int g, h, i; CString j, k; // вывод результата // Инициализация массива for (g = 0; g < 200; g++) a [g] = b [g] = 0; a [0] = 1; d = 1; for (g = 1; g <= 100; g++) // считаем факториал числа { for (h = 0; h < d; h++) { a [h] *= g; if (g % 2 == 0) b [h] += a [h]; } for (h = 0; h < d + 2; h++) { i = a [h] / 10; // выделяем число десятков, заносим во временную переменную a [h] %= 10; a [h + 1] += i; } if (a [d + 1]) // смотрим, на сколько увеличилось количество цифр в числе d += 2; else if (a [d]) d++; } for (h = 0; h < d; h++) { i = b [h] / 10; // выделяем число десятков, заносим во временную переменную b [h] %= 10; b [h + 1] += i; } // Вывод результатов j = ""; for (g = 0; g < d; g++) { k.Format ("%i", a [g]); j = k + j; } k = "100! = "; j = k + j; pDC -> TextOut (10, 10, j); j = ""; for (g = 0; g < d; g++) { k.Format ("%i", b [g]); j = k + j; } k = "S = "; j = k + j; pDC -> TextOut (10, 35, j); }
ПРОГРАММИСТЫ
:Юрий Казекин
/* p52
Язык Visual C++ 6.0
Факториал
Задача. Найти 100!
52.5.1. Используя алгоритм вычисления функции факториал n в качестве вспомогательного,
напишите алгоритм вычисления суммы факториалов всех чётных чисел от 2 до 100. */
void CP52View::OnDraw (CDC *pDC)
{
CP52Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
int a [200], b [200]; // Место для хранения числа.
// В каждом элементе массива хранится 1 цифра.
int d; // число цифр
int g, h, i;
CString j, k; // вывод результата
// Инициализация массива
for (g = 0; g < 200; g++) a [g] = b [g] = 0;
a [0] = 1;
d = 1;
for (g = 1; g <= 100; g++) // считаем факториал числа
{
for (h = 0; h < d; h++)
{
a [h] *= g;
if (g % 2 == 0) b [h] += a [h];
}
for (h = 0; h < d + 2; h++)
{
i = a [h] / 10; // выделяем число десятков, заносим во временную переменную
a [h] %= 10;
a [h + 1] += i;
}
if (a [d + 1]) // смотрим, на сколько увеличилось количество цифр в числе
d += 2;
else
if (a [d])
d++;
}
for (h = 0; h < d; h++)
{
i = b [h] / 10; // выделяем число десятков, заносим во временную переменную
b [h] %= 10;
b [h + 1] += i;
}
// Вывод результатов
j = "";
for (g = 0; g < d; g++)
{
k.Format ("%i", a [g]);
j = k + j;
}
k = "100! = ";
j = k + j;
pDC -> TextOut (10, 10, j);
j = "";
for (g = 0; g < d; g++)
{
k.Format ("%i", b [g]);
j = k + j;
}
k = "S = ";
j = k + j;
pDC -> TextOut (10, 35, j);
}