1088.Rational Arithmetic

来源:互联网 发布:淘宝花溪是卖的正品吗 编辑:程序博客网 时间:2024/05/23 07:24
【题意】
        对两个分数进行四则运算,并用最简形式表示结果

【思路】

        通过求最大公约数约分,别的就没啥好说的了


#include <iostream>#include <string>#include <cstring>#include <cstdio>#include <sstream>#include <cmath>using namespace std;#define ll long longll 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;}


0 0
原创粉丝点击