本题,在我看来重点在于分数的输出,同时输出需要最简分数。
#include <iostream>
using namespace std;
long int gcd(long int a, long int b)
{
return b == 0 ? abs(a) : gcd(b, a%b);
}
void pri(long int a, long int b){
long int res = gcd(a,b);
a = a/res;
b = b/res; //化为最简分数
long int num;
num = a / b;
if(a != 0){
if(a<0)
cout << "(";
if(abs(a)%b == 0)
printf("%ld",num);
else if(num != 0)
printf("%ld %ld/%ld",num,abs(a)%b,b);
else
printf("%ld/%ld",a,b);
if(a<0)
cout << ")";
}else{
printf("0");
}
}
int main()
{
long int a1,a2,b1,b2,k,a,b;
scanf("%ld/%ld %ld/%ld",&a1,&b1,&a2,&b2);
pri(a1,b1);
cout << " + ";
pri(a2,b2);
cout << " = ";
pri(a1*b2+a2*b1,b1*b2);
cout << endl;
pri(a1,b1);
cout << " - ";
pri(a2,b2);
cout << " = ";
pri(a1*b2-a2*b1,b1*b2);
cout << endl;
pri(a1,b1);
cout << " * ";
pri(a2,b2);
cout << " = ";
pri(a1*a2,b1*b2);
cout << endl;
pri(a1,b1);
cout << " / ";
pri(a2,b2);
cout << " = ";
if(a2<0){
a2 *= -1;
b2 *= -1;
}
if(b1*a2 == 0){
cout << "Inf";
}else
pri(a1*b2,b1*a2);
cout << endl;
return 0;
}