2013-09-18 3 views
-1

Да. Это задание, это довольно дразнилка для меня, чтобы быть честным. Цель программы, или «проблема» (если вы хотите посмотреть на нее в математических выражениях), делит два числа друг на друга. Вы можете разделить целые числа и фракции друг против друга. Определение функции выглядит следующим образом:Преобразование фракции в десятичную с целыми числами в C++

bool divide(int c1, int n1, int d1, int c2, int n2, int d2, char result[], int len) 

c1, c2 - целые числа

n1, n2 - Числитель 1, числитель 2

d1, d2 - Знаменатель 1, Знаменатель 2

результат [] - массив символов, который является чтобы отобразить ответ

Len - количество символов в результате []


Я бы просто использовать длинные разделения и найти свой ответ таким образом, но так как существует ограничение не использовать double, float, или string Я более ограничен в своих возможностях по отношению к моему подходу.

Хорошей новостью является то, что я получил далеко идущие пути к окончательному решению и хотел бы задать совет, каким может быть мой следующий шаг. Это мой процесс до сих пор:

1) Преобразование каждого числа к ненадлежащей фракции

2) Возьмите результат 1 * (1/результат 2)

3) Найти целочисленную часть решения (если есть один)

4) (Из-за неправильную фракцию) Возьмите числитель% знаменатель, чтобы найти свой новый числитель для смешанной фракции у меня есть

5) Я сейчас здесь, пытаясь найти базу 10 для знаменателя, поэтому я могу представить смешанная фракция в десятичном формате .. Любые указатели были бы полезны!

ответ

2

(А/В)/(C/D) = (А/В) х (D/C) = (AD)/(БК)

Так просто вычислить AD и BC, а затем снижают до самого низкого сроки.

Если вы хотите сделать деление, сделайте это так же, как и на бумаге.

+0

Благодарим вас за ответ. У меня алгоритм работает до этого момента. Может ли другой способ представить эту дробь в виде десятичной дробной части, отличной от нахождения эквивалентного знаменателя базы 10? – Zac

+0

@Zac На самом деле выполните длинное разделение, как и на бумаге. –

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