题目描述
给定一个分数 a/b,若它是一个假分数,请将它化简成带分数形式输出。
例如当a/b=91/30,输出
1
3--
30
当输入是一个真分数时,请将它化简后输出,且忽略整数部分,
例如当a/b=30/100 时,输出
3
--
10
输入的分数可以变成整数时,忽略它分数部分。注意输出的所有分数都应该是既约的。
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b) {
if(b==0) {
return a;
}return gcd(b,a%b);
}int main() {
int a,b;
scanf("%d/%d",&a,&b);
int g=gcd(a,b);
a/=g,b/=g;
int digit=0,Numerator_space=0,Denominator_space=0,Belt_space=0;
int num=b,Numerator=a%b,Denominator=b,Belt=a/b;
while(num) {
digit++,num=num/10;
}while(Numerator) {
Numerator_space++,Numerator=Numerator/10;
}while(Denominator) {
Denominator_space++,Denominator=Denominator/10;
}while(Belt) {
Belt_space++,Belt=Belt/10;
}if(a%b==0) {
cout<<a/b;return 0;
}if(a>b) {
for(int i=1; i<=Denominator_space+Belt_space-Numerator_space; i++)cout<<" ";
cout<<a%b<<endl;
cout<<a/b;
for(int i=1; i<=digit; i++)cout<<"-";
cout<<endl;
for(int i=1; i<=Belt_space; i++)cout<<" ";
cout<<b<<endl;
}if(a<b) {
for(int i=1; i<=Denominator_space+Belt_space-Numerator_space; i++)cout<<" ";
cout<<a<<endl;
for(int i=1; i<=digit; i++)cout<<"-";
cout<<endl;
cout<<b<<endl;
}return 0;
}