1088. Rational Arithmetic (20)

来源:互联网 发布:58速运 知乎 编辑:程序博客网 时间:2024/06/05 16:39

    给定分子分母能准确给出其标准形式,期间需要求最大公约数,注意负数还有加括号的处理

#include <iostream>#include <cstdio>#include <sstream>using namespace std;long long gcd(long long a, long long b){while(b){long long r = a%b;a = b;b = r;}return a;}string format(long long n, long long d){if(n == 0) return "0";string s;stringstream ss;bool neg = n < 0;if(neg){n = -n;ss << "(-";}long long r = gcd(n, d);n /= r;d /= r;if(n%d == 0){ss << n;}else if(n > d){ss << n/d;ss << " ";ss << n%d << "/" << d;}else{ss << n << "/" << d;}if(neg){ss << ")";}getline(ss, s);return s;}int main(){long long a1,b1,a2,b2;scanf("%lld/%lld %lld/%lld", &a1, &b1, &a2, &b2);// +long long sum1 = a1*b2 + a2*b1;long long sum2 = b1*b2;// -long long sub1 = a1*b2 - a2*b1;long long sub2 = b1*b2;// *long long mul1 = a1*a2;long long mul2 = b1*b2;printf("%s + %s = %s\n", format(a1, b1).c_str(), format(a2, b2).c_str(), format(sum1, sum2).c_str());printf("%s - %s = %s\n", format(a1, b1).c_str(), format(a2, b2).c_str(), format(sub1, sub2).c_str());printf("%s * %s = %s\n", format(a1, b1).c_str(), format(a2, b2).c_str(), format(mul1, mul2).c_str());// /if(a2 == 0){printf("%s / %s = Inf\n", format(a1, b1).c_str(), format(a2, b2).c_str());}else{long long quo1 = a1*b2;long long quo2 = b1*a2;if(a2 < 0){quo1 = -quo1;quo2 = -quo2;}printf("%s / %s = %s\n", format(a1, b1).c_str(), format(a2, b2).c_str(), format(quo1, quo2).c_str());}return 0;}


0 0
原创粉丝点击