2011-12-14 1 views
1

интервью вопроса:новообращенной дроби в строку, а также вставить [] для повторения части

Учитывая два Int N (числитель) и D (знаменатель), вернуть фракцию в строке. если фракция повторяется, тогда отобразите повторяющуюся часть в скобке.

Пример: Вход: N = 1, D = 3 Выход: 0. [3]

Пример: Входной сигнал: N = 2, D = 5 выход: 0,4

Моя идея:

получить = N/D с двойным значением.

для части после запятой, получить каждую цифру по x 10 в процессе, если поиск повторяется, запишите индекс и вставьте [] окончательно.

для части до десятичной точки, получить каждую цифру по/10

Все лучшие идеи?

спасибо

ответ

4

Я бы не использовал двойной, как чума. Из-за конечной точности он не даст вам правильного ответа. Придерживайтесь целочисленной арифметики и моделируйте long division, отслеживая остаток. После того, как вы закончите цифры в числителе (так что вы снижаете нули), также сохраняйте историю остатков, и если вы видите остаток, который уже находится в истории, это говорит о том, что вы нажмете повторяющуюся последовательность. Затем вы можете построить конечную часть в скобках. (Если вы нажмете нулевой остаток, конечно, это означает, что ответ является конечной долей.)

+0

Да. И [код в этом ответе на другой родственный вопрос] (http://stackoverflow.com/a/8455604/968261) может помочь с длинным делением числителя, знаменателя и остатков. –

 Смежные вопросы

  • Нет связанных вопросов^_^