大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
2017年山科C语言期末考试
Problem L: 最简分式
Description
我们知道,5/3=1+3/5,称等号后面的式子为最简分式。也就是说,在分式中,分子一定要小于分母,而且分子、分母是互质的。请写一个程序,对于用户输入的一个合法分式,输出其约简之后的结果。
Input
输入有多行,每行是“m/n”的格式表示的一个分式,其中m和n都是int类型范围内的正整数。
输入至EOF结束。
Output
输出的行数与输入一致,且每行输出与上述输入一一对应。
如果约简后,分子部分是0,则只输出整数部分。
如果整数部分是0,则按照“j/k”的格式输出;
如果整数部分不是0,则按照“i+j/k” 的格式输出约简后的结果。
其中i、j和k分别是约简后的整数部分、分子部分和分母部分。
Sample Input
100/56
8/4
3/5
Sample Output
1+11/14
2
3/5
ans:
#include<stdio.h>
#include<stdlib.h>
int getMin(int a,int b)
{
if(a<b)return a;
else return b;
}
int main()
{
int m,n;
while(scanf("%d/%d",&m,&n)!=EOF){
if(m%n==0){
//最简单的情况,直接输出m/n
printf("%d\n",m/n);
}else if(m<n){
//分子小于分母,分式形式,看是否要化为最简分式
int min=getMin(m,n);
for(int i=2;i<=min;i++){
while(m%i==0&&n%i==0){
m/=i;
n/=i;
}
}
printf("%d/%d\n",m,n);
}else{
//分子大于分母,拆分为一个整数加一个分式
int len=0;
while(m>n){
len++;
m-=n;
}
int min=getMin(m,n);
for(int i=2;i<=min;i++){
while(m%i==0&&n%i==0){
m/=i;
n/=i;
}
}
printf("%d+%d/%d\n",len,m,n);
}
}
return 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/222883.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...