题目背景
无敌 U 第二弹。
题目描述
某 U 在上六年级时学了分数,但计算后的结果是不是最简很让他头疼,由于他知道你是个老实人,所以又把这个问题给你。给你一个分数( a 分之 b 输入为 “b/a”),如果是最简,输出“ Yes ”,否则输出它的最简。
输入格式
输入共一行。
第一行按上述格式输入一个分数。
输出格式
输出共一行。
第一行输出“ Yes ”或分数的最简形式。
输入输出样例
输入 #1复制
5/10
输出 #1复制
1/2
输入 #2复制
1/3
输出 #2复制
Yes
说明/提示
0 ≤ a,b ≤ 100 。
注意假分数
题解:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int gcd(int a,int b){
while(b!=0){
int t=b;
b=a%b;
a=t;
}
return a;
}
int main(){
string s;
cin>>s;
size_t l=s.find('/');
int d=stoi(s.substr(0,l));
int n=stoi(s.substr(l+1));
int r=gcd(d,n);
if (r==1){
cout<<"Yes";
}
else{
int sd=d/r;
int sn=n/r;
if(sd%sn==0){
cout<<(sd/sn);
}
else{
cout<<sd<<'/'<<sn;
}
}
return 0;
}