ЗАДАЧИ
problems.ru
О проекте | Об авторах | Справочник
Каталог по темам | по источникам |
К задаче N

Проект МЦНМО
при участии
школы 57
Задача 76226
Темы:    [ Знакомство с циклами ]
[ Задачи с целыми числами ]
[ Десятичная запись числа ]
Сложность: 2
Классы:
В корзину
Прислать комментарий

Условие

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

© 2004-... МЦНМО (о копирайте)
Пишите нам

Проект осуществляется при поддержке Департамента образования г.Москвы и ФЦП "Кадры" .