鱼C论坛

 找回密码
 立即注册
查看: 1546|回复: 8

[已解决]求大神

[复制链接]
发表于 2018-12-17 22:06:01 | 显示全部楼层 |阅读模式
6鱼币

大佬有注释就写写吧

大佬有注释就写写吧
最佳答案
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
理想小青年 + 2 + 2 无条件支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-17 22:51:54 | 显示全部楼层
就相当于求最大公约数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-17 23:31:02 | 显示全部楼层

第42行有错误,编译不出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-18 01:45:21 | 显示全部楼层
HJX54088 发表于 2018-12-17 23:31
第42行有错误,编译不出来。

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

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

问问题时要详细描述你遇到的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

嗯,好的,可能是编译器不一样的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-18 08:13:36 | 显示全部楼层
Croper 发表于 2018-12-18 01:48
你把scanf改成scanf_s试试

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

思路比较清晰,代码有点不完整,我用的是C++的编译器。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

抱歉,我没有事先说清楚。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 02:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表