HJX54088 发表于 2018-12-17 22:06:01

求大神

人造人 发表于 2018-12-17 22:06:02

#include <stdio.h>

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

size_t GetGreatestCommonDivisor(Fraction fraction)
{
        size_t greatest_common_divisor;
        if(fraction.numerator > fraction.denominator)
        {
                greatest_common_divisor = fraction.denominator;
        }
        else
        {
                greatest_common_divisor = fraction.numerator;
        }

        while((fraction.numerator % greatest_common_divisor != 0) || (fraction.denominator % greatest_common_divisor != 0))
                --greatest_common_divisor;
        return greatest_common_divisor;
}

Fraction Reduce(Fraction fraction)
{
        size_t greatest_common_divisor = GetGreatestCommonDivisor(fraction);
        Fraction result = {fraction.numerator / greatest_common_divisor, fraction.denominator / greatest_common_divisor};
        return result;
}

void PrintFraction(Fraction fraction)
{
        printf("%u/%u\n", fraction.numerator, fraction.denominator);
}

int main(void)
{
        Fraction fraction;
        printf("请输入: ");
        scanf("%u/%u", &fraction.numerator, &fraction.denominator);
        PrintFraction(Reduce(fraction));
        return 0;
}

TOP_LK 发表于 2018-12-17 22:51:54

就相当于求最大公约数

HJX54088 发表于 2018-12-17 23:31:02

人造人 发表于 2018-12-17 23:14


第42行有错误,编译不出来。

人造人 发表于 2018-12-18 01:45:21

HJX54088 发表于 2018-12-17 23:31
第42行有错误,编译不出来。

在你问问题时先问自己一个问题,你问的这个问题别人看到后是什么反应?
“第42行有错误,编译不出来。”   ???
这是我的反应
42行有什么错误?我把代码贴上来了,说明在我这边可以通过编译

你问 “xxx有错误”,那么一定会有人对这个问题再次提问“xxx有什么错误?”
为什么会这样?因为你的问题不够完整

问问题时要详细描述你遇到的问题

Croper 发表于 2018-12-18 01:48:00

本帖最后由 Croper 于 2018-12-18 02:03 编辑

第42行有错误,编译不出来。
你把scanf改成scanf_s试试

另外提一下。。求最大公约数用辗转相除法比较快
int GetGCD(int p,int q) //辗转相除法求最大公约数
{
        int a;
        do                        
        {
                a = p % q;
                p = q;
                q = a;
        } while (a != 0);

        return p;
}

HJX54088 发表于 2018-12-18 07:52:58

人造人 发表于 2018-12-18 01:45
在你问问题时先问自己一个问题,你问的这个问题别人看到后是什么反应?
“第42行有错误,编译不出来。” ...

嗯,好的,可能是编译器不一样的问题

HJX54088 发表于 2018-12-18 08:13:36

Croper 发表于 2018-12-18 01:48
你把scanf改成scanf_s试试

另外提一下。。求最大公约数用辗转相除法比较快

思路比较清晰,代码有点不完整,我用的是C++的编译器。

HJX54088 发表于 2018-12-18 08:14:52

人造人 发表于 2018-12-18 01:45
在你问问题时先问自己一个问题,你问的这个问题别人看到后是什么反应?
“第42行有错误,编译不出来。” ...

抱歉,我没有事先说清楚。
页: [1]
查看完整版本: 求大神