减少 C 中的分数

Reduce fractions in C

在 c 编程中,当我除以 2/4 之类的 2 个数字时,输出为 0.5,但我想要 1/2。所以我想知道如何执行除法以获得 numerator/denominator 这样的分数形式的答案。我要C.

C 没有内置该功能。但是,您可以做的是编写一个小函数,该函数采用分数值(在您的情况下为 0.5)和 returns 您正在寻找的形式的分数(即 1/2)。

但是记住,1/2不是数字;它是一个字符串(字符数组)。因此,您只能将其用于 display/print 目的;你不能在算术表达式中使用。

抱歉,我无法将其改编为 C,但您肯定可以移植回代码,因为它并不复杂

#include <iostream>
#include <string>

long GreatestCommonMultiple(long& a, long& b);
std::string SimplifyThis(long& a, long& b);

int main(int argC, char** argV)
{
    long n1 = 3;
    long n2 = 21;
    std::cout << "This as simplified fraction: " << n1 << "/" << n2 << " is "<<SimplifyThis(n1, n2)<<std::endl;
    return 0;
}

std::string SimplifyThis(long& a, long& b) {
    long gcm1 = GreatestCommonMultiple(a, b);
    return std::to_string(a / gcm1) + "/" + std::to_string(b / gcm1);
}

long GreatestCommonMultiple(long& a, long& b) {
    if (b==0)
    {
        return a;
    }
    long x = (a % b);
    return GreatestCommonMultiple(b, x);
}

您真正想要的是减少分数..而不是计算除法。

这里有一个快速示例,可以生成减少的分数:

#include <stdbool.h>
#include <stdio.h>

//gcf function - return gcd of two numbers
int gcd(int n, int m)
{
    int gcd, remainder;

    while (n != 0)
    {
        remainder = m % n;
        m = n;
        n = remainder;
    }

    gcd = m;

    return gcd;
}//end gcd function

int main (int argc, const char * argv[]) {
    // insert code here...
    //--declarations
    int number1, number2;
    int newNumber1, newNumber2;

    //--get user input
    printf("Enter a fraction: ");
    scanf("%d/%d", &number1, &number2);

    //--calculations
    //find the gcd of numerator and denominator
    //then divide both the numerator and denominator by the GCD
    newNumber1 = number1 / gcd(number1, number2);
    newNumber2 = number2 / gcd(number1, number2);

    //--results
    printf("In lowest terms: %d/%d", newNumber1, newNumber2);
}

样本取自:http://snipplr.com/view/42917/