续分数

时间:2014-05-09 03:47:03

标签: c++ algorithm debugging loops formula

这里是我用小数点做的,它有效:

double continuedFractionDecimal(int a[], int size)
{
    double fraction = a[size - 1];  

    for(int i = size - 2; i >= 0; i--)
    {
        fraction = a[i] + 1/fraction;
    }

    return fraction;
}

我的问题是你如何使用整数分数运算做同样的事情:分子和分母。我需要非递归地执行它,并且所有内容都应该在函数内完成,而不需要包含任何额外的操作。一旦你知道怎么做,我就不会认为这很难,但对我而言,我无法想象它,我感谢任何指导......谢谢你。< / p>

1 个答案:

答案 0 :(得分:2)

如果我正确理解continued fractions,则无需计算分子和分母的GCD。

以下程序完成工作:

#include <iostream>
#include <utility>

std::pair<int, int> getFraction(int a[], int size)
{
   int n = 1;
   int d = a[size-1];
   for(int i = size - 2; i >= 0; i--)
   {
      int nextd = d*a[i] + n;
      n = d;
      d = nextd;
   }

   // When we are done, d is the numerator and n is the denominator.
   return std::make_pair(d, n);
}

int main()
{
   int a[] = {4, 2, 6, 7};
   int size = sizeof(a)/sizeof(a[0]);
   std::pair<int, int> f = getFraction(a, size);
   std::cout
      << "Numerator: " << f.first
      << ", Denominator: " << f.second << std::endl;
}

运行程序的输出:

Numerator: 415, Denominator: 93