|
Цифры после запятой
(Время: 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)
| |