Условие
Даны натуральные числа
n и
k,
n >
1.
Напечатать
k десятичных знаков числа
1/
n.
(При наличии двух десятичных разложений выбирается то из
них, которое не содержит девятки в периоде.) Программа
должна использовать только целые переменные.
Решение
Сдвинув в десятичной записи числа
1/
n
запятую на
k мест вправо, получим число
10k/
n. Нам надо напечатать его целую часть,
то есть разделить
10k на
n нацело.
Стандартный способ требует использования больших по
величине чисел, которые могут выйти за границы диапазона
представимых чисел. Поэтому мы сделаем иначе (следуя
обычному методу " деления уголком") и будем хранить
"остаток"
r:=1
l := 0; r := 1;
{инв.: напечатано l разрядов 1/n, осталось напечатать
k - l разрядов дроби r/n}
while l <> k do begin
| write ( (10 * r) div n);
| r := (10 * r) mod n;
| l := l + 1;
end;
Источники и прецеденты использования
|
|
|
книга |
|
Автор |
А.Шень |
|
Название |
Программирование: теоремы и задачи |
|
Издательство |
МЦНМО |
|
Издание |
второе |
|
Год издания |
2004 |
|
глава |
|
Номер |
1 |
|
Название |
Переменные, выражения, присваивания |
|
параграф |
|
Номер |
1 |
|
Название |
Задачи без массивов |
|
задача |
|
Номер |
1.1.30 |