题目
分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如 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;
}