【题意】
对两个分数进行四则运算,并用最简形式表示结果
【思路】
通过求最大公约数约分,别的就没啥好说的了
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <sstream>
#include <cmath>
using namespace std;
#define ll long long
ll gcd(ll a, ll b){
if(a<b){
return gcd(b,a);
}
else if(a%b==0){
return b;
}
else{
return gcd(b,a%b);
}
}
string ll2str(ll num){
string res = "";
while(num){
res.insert(res.begin(),num%10+'0');
num /= 10;
}
return res;
}
string simplestForm(ll numerator, ll denominator){
if(denominator==0){
return "Inf";
}
else if(numerator==0){
return "0";
}
else{
string res = "";
bool nf = false;
if((numerator<0 && denominator>0) || (numerator>0 && denominator<0)){
nf = true;
res.append("(-");
}
numerator = abs(numerator);
denominator = abs(denominator);
ll tmp = gcd(numerator,denominator);
numerator /= tmp;
denominator /= tmp;
if(numerator/denominator){
ll tmp = numerator/denominator;
numerator %= denominator;
res.append(ll2str(tmp));
if(numerator==0){
if(nf){
res.insert(res.end(),')');
}
return res;
}
else{
res.append(" ");
}
}
res.append(ll2str(numerator)+"/"+ll2str(denominator));
if(nf){
res.insert(res.end(),')');
}
return res;
}
}
int main(int argc, char const *argv[])
{
ll numerator[3],denominator[3];
for(int i=0; i<2; i++){
scanf("%lld/%lld", &numerator[i], &denominator[i]);
}
string newForm[3];
for(int i=0; i<2; i++){
newForm[i] = simplestForm(numerator[i], denominator[i]);
}
cout << newForm[0] << " + " << newForm[1] << " = ";
numerator[2] = numerator[0]*denominator[1]+numerator[1]*denominator[0];
denominator[2] = denominator[0]*denominator[1];
newForm[2] = simplestForm(numerator[2], denominator[2]);
cout << newForm[2] << endl;
cout << newForm[0] << " - " << newForm[1] << " = ";
numerator[2] = numerator[0]*denominator[1]-numerator[1]*denominator[0];
denominator[2] = denominator[0]*denominator[1];
newForm[2] = simplestForm(numerator[2], denominator[2]);
cout << newForm[2] << endl;
cout << newForm[0] << " * " << newForm[1] << " = ";
numerator[2] = numerator[0]*numerator[1];
denominator[2] = denominator[0]*denominator[1];
newForm[2] = simplestForm(numerator[2], denominator[2]);
cout << newForm[2] << endl;
cout << newForm[0] << " / " << newForm[1] << " = ";
numerator[2] = numerator[0]*denominator[1];
denominator[2] = denominator[0]*numerator[1];
newForm[2] = simplestForm(numerator[2], denominator[2]);
cout << newForm[2];
system("pause");
return 0;
}