Условие
Даны натуральные числа
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 |