Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 

Цифры после запятой

(Время: 1 сек. Память: 16 Мб Сложность: 26%)

Несмотря на то, что данная задача для многих может показаться сложной, т.к. имеет отношение к длинной арифметике, она достаточно проста для кодирования. Действительно, находить все цифры значения получаемой дроби можно так же как и в процессе деления, как это было бы, если бы мы это реализовывали вручную на листке бумаги.

Первая цифра, до запятой, которая нас не интересует равна значению a div b. Для вычисления первой цифры после запятой мы берем значение остатка этого деления (a mod b), умножаем на 10 и снова делим целочисленно на b. Так, в качестве первой цифры мы получим значение ((a mod b)*10) div b. Для вычисления второй цифры мы поступаем аналогичным образом, но берем уже значение остатка (((a mod b)*10) mod b) и проделываем с ним то же самое, т.е. умножаем на 10 и делим целочисленно на b, так получается вторая цифра, и так далее. На каждом шаге мы получаем какое то значение, от которого надо взять остаток от деления на b и умножить на 10. Это значение можно сохранять в некоторой переменной (удобнее для этого использовать имеющуюся переменную a). В тот момент, когда мы получим это значение на k-м шаге, то для извлечения k-й цифры достаточно будет вычислить a div b.

Алгоритмическая реализация вышеописанного:

  read(a,b,k)
  for i=1..k 
    a = 10*(a mod b)
  write(a div b)

[Обсуждение] [Все попытки] [Задача]


Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru