Файл: Лабораторная работа 1 Фундаментальные структуры данных Факториал Реализовать вычисление факториала чисел.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.12.2023
Просмотров: 12
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лабораторная работа №1
Фундаментальные структуры
данных
1. Факториал
Реализовать вычисление факториала чисел (на различных целочисленных типах). Определить допустимые диапазоны вычислений.
В языке Python используется два целочисленных типа: целые числа, длинные целые числа.
Целочисленный тип представляет диапазон чисел от -2147483648 до 2147483647. Тип длинных целых чисел способен представлять числа неограниченной величины (ограничение накладывается только объемом доступной памяти).
Несмотря на то, что существует два целочисленных типа, интерпретатор Python старается скрыть имеющиеся различия — когда целое число выходит за допустимый диапазон, происходит переключение на длинную арифметику. Это позволяет работать с числами произвольной длины (пока хватает памяти), ценой увеличения времени работы (так как в этом случае арифметические операции реализуются не аппаратно, а программно).
По определению факториал числа n есть
n! = 1·2·3· … ·n, 0! = 1 (1)
Программная реализация
def factorial( n ):
if n < 0: # факториал определён только для
return None # неотрицательных целых чисел
if n == 0 or n == 1: # 0! = 1! = 1
return 1
else: # общий случай, расчёт по формуле (1)
f = 2
for i in range( 3, n + 1 ):
f *= i
return f
Пример расчёта
500! = 12201368259911100687012387854230469262535743428031928421
92413588385845373153881997605496447502203281863013616477148203
5841633787220781772004807852051593292854779075719393306037729
6085908627042917454788242491272634430567017327076946106280231
04526442188787894657547771498634943677810376442740338273653974
713864778784954384895955375379904232410612713269843277457155463
0997720278101456108118837370953101635632443298702956389662891165
897476957208792692887128178007026517450776841071962439039432253
642260523494585012991857150124870696156814162535905669342381300
885624924689156412677565448188650659384795177536089400574523894
03357984763639449053130623237490664450488246650759467358620746
3792518420045936969298102226397195259719094521782333175693458150
8552332820762820023402626907898342451712006207714640979456116127
62914595123722991334016955236385094288559201872743379517301458635
7570828355780158735432768888680120399882384702151467605445407663
53598417443048012893831389688163948746965881750450692636533817505
5478128640000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000
2. Индивидуальное задание
Вариант 40. Замечена следующая закономерность:
9 х 1+2=11
9 х 12 + 3 =111
9 х 123 + 4 =1111
9 х 1234 + 5 =11111
Написать программу, подтверждающую эту закономерность.
Данная закономерность описывается уравнением
9 ciphsk + k + 1 = unitsk, k = 1, 2, ... (2)
где ciphsk и unitsk определяются рекуррентно
ciphsk = 10 ciphsk-1 + k + 1, ciphs1 = 1;
unitsk = 10 ciphsk-1 + 1, units1 = 11.
Программная реализация
max = 10 # максимальное количество итераций
ciphs = 1
units = 11
for k in range( 1, max ):
if ( 9*ciphs + k + 1 ) == units:
print( "9 *", ciphs, " + ", k + 1, "=", units )
ciphs = 10*ciphs + k + 1
units = 10*units + 1
Скриншот результатов работы скрипта