【问题标题】:Recursive Function Struct Simplify Fractions递归函数结构简化分数
【发布时间】:2014-07-06 02:46:09
【问题描述】:

我在这里遇到了困难,需要一些帮助(我已经在这里待了好几个小时了,却无处可去……)。 好的,所以我的问题是我不知道如何制作一个使用 typedef 返回简化分数的函数。换句话说,我想使用欧几里得方法来获得这样的 GCD:

int gcd(int a, int b)
{
    int rem;

    if ((rem = a % b) == 0) {
        return b;
    }
    else {
        return gcd(b, rem);
    }
}

然后简单地用这样的东西:

int result = gcd(num, den);
int simple_num = num / result;
int simple_den = den / result;
printf("%d / %d", simple_num, simple_den); 

但是,我正在尝试使用名为 fraction 的 typedef 并使用一个函数来返回我的简化分子和分母。

typedef struct
{
    int numerator;
    int denominator;
} Fraction;

Fraction simplify(Fraction myFraction)
{
    return myFraction;
}

有人知道这是怎么做到的吗?

【问题讨论】:

  • 您可以为您的Fraction 类型实现moddivequals 并使用gcd
  • 是的,我想过类似的事情,但我试图用一个函数来完成这一切,而不是使用 gcd ......而是使用其他类似的方法。到目前为止,在没有递归函数的情况下,我还无法写出具有 gdc 准确性的作品
  • GCD 可以用一个简单的循环来实现。计算完rem = a % b;后,设置a = b;b = rem;,一直循环直到rem == 0
  • 如果 b 大于 a,你可能不得不交换 a 和 b,对吧……至少这是我周六的大脑所说的
  • @Grady 如果a 小于b,则不需要交换,因为a % b 等于a。所以交换(在第一次通过循环时)自动发生rem=a; a=b; b=rem; 代码应该在循环之前检查a==0 || b==0

标签: c function recursion fractions simplify


【解决方案1】:

这应该可行:

Fraction simplify(Fraction myFraction)
{
   int result = gcd(myFraction.numerator, myFraction.denominator);
   int simple_num = num / result;
   int simple_den = den / result;
   Fraction newFraction = {simple_num, simple_den};
   return newFraction;
}

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 2018-08-27
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2012-06-17
    • 2016-07-12
    相关资源
    最近更新 更多