编程题 7-24 约分最简分式【PAT】

编程练习题目集目录

题目

  分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如 6 / 12 6/12 6/12 可以被约分为 1 / 2 1/2 1/2。当分子大于分母时,不需要表达为整数又分数的形式,即 11 / 8 11/8 11/8 还是 11 / 8 11/8 11/8;而当分子分母相等时,仍然表达为 1 / 1 1/1 1/1 的分数形式。

输入格式

  输入在一行中给出一个分数,分子和分母中间以斜杠/分隔,如: 12 / 34 12/34 12/34 表示 34 34 34 分之 12 12 12。分子和分母都是正整数(不包含 0 0 0,如果不清楚正整数的定义的话)。
提示:在 s c a n f scanf scanf 的格式字符串中加入 / / /,让 s c a n f scanf scanf 来处理这个斜杠。

输出格式

  在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用 分子 / 分母 分子/分母 分子/分母 的形式表示分数。如 5 / 6 5/6 5/6 表示 6 6 6 分之 5 5 5

输入样例

66/120

输出样例

11/20

题解

解题思路

  先用 s c a n f ( ) scanf() scanf() 函数控制输入,然后判断分子和分母哪个小,从 2 2 2 开始,寻找分子和分母的最小公约数,然后将分子和分母分别约分,知道小于分子和分母其中最小的一个数为止,然后输出结果即可。

完整代码

#include<iostream>
#include<stdio.h>

using namespace std;
int main(void)
{
    
    
    int x, y, min;
    printf("请输入一个分数:");         // 提交时注释此行
    scanf("%d/%d", &y, &x);
    min = y > x ? x : y;
    for (int i = 2; i <= min; i++)
    {
    
    
        if (x % i == 0 && y % i == 0)
        {
    
    
            x /= i;
            y /= i;
            min = y > x ? x : y;
            i = 1;
        }
    }
    cout << y << "/" << x;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41918107/article/details/143141917