Р. ЛАФОРЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть13) онлайн

Прикладная программа

 

Рис. 13.3. Сложение чисел в формате verylong

Листинг 13.3. Программа VL_APP

// vl_app.cpp

// вычисляет факториалы больших чисел

#include "verylong.h"    //заголовочный файл verylong

 

int main()

{

  unsigned long numb, j;

  verylong fact=1;       //инициализировать verylong

 

  cout << "\n\nВведите число: ";

  cin >> numb;           //ввод числа типа long int

 

  for(j=numb; j>0; j--)  //факториал — это numb *

    fact = fact * j;     //  numb-1 * numb-2 *

  cout << "Факториал= "; //  numb-3 и т. д.

  fact.putvl();          //вывести значение факториала

  cout << endl;

  return 0;

}

 

В этой программе fact — переменная класса veryiong. Другие переменные —

numb, j — не обязаны быть того же типа, они еще не доросли до таких размеров.

Например, для подсчета факториала числа 100 необходимо всего 3 разряда, тогда

как в fact для этого должно быть 158 разрядов.

 

Обратите внимание, как в выражении

fact = fact * j;

переменная j автоматически переводится в формат verylong. Это делается с помо-

щью конструктора с одним аргументом перед началом выполнения операции

умножения.

Вот какую прелесть вы увидите на экране при нахождении факториала

числа 100:

Введите число: 100

Факториал=

93326215443944152681699238856266700490715948264381621468592963895217599993229915608941463976

156518286253697920827223758251185210916864000000000000000000000000

А попробуйте-ка .вычислить такое, используя обычный тип Long! Удиви-

тельно, но программа работает довольно быстро. Приведенный выше пример

вычислялся какие-то доли секунды. Вы можете вычислять факториалы вплоть

до 400!, примерно после этого числа будет достигнут 1000-разрядный предел

формата1.

 

18