NC21743. 简单的分数
描述
John最近对分数很感兴趣,在研究分数的加减运算。现在要求计算两个分数的运算。
输入描述
输入一个正整数T,表示有T组数据
每组数据包括5个整数op,a,b,c,d
op为1表示a/b + c/d;op为0表示为a/b – c/d
其中1 <= T, a,b,c,d <= 100;
输出描述
输出分数运算结果“x/y”,要求x/y是最简分数。
示例1
输入:
4 1 1 2 1 3 0 1 2 1 2 1 1 2 1 2 0 1 3 1 2
输出:
5/6 0/1 1/1 -1/6
C(clang 3.9) 解法, 执行用时: 3ms, 内存消耗: 376K, 提交时间: 2018-12-30 15:03:18
#include<stdio.h> int main() { int t,op,a,b,c,d,e,f; scanf("%d",&t); while(t--) { scanf("%d %d %d %d %d",&op,&a,&b,&c,&d); f=b*d; if(op==1) e=a*d+c*b; else e=a*d-c*b; int i=2; while(f/i) { if(e%i==0&&f%i==0) { e/=i; f/=i; } else i++; } printf("%d/%d\n",e,f); } return 0; }
C++14(g++5.4) 解法, 执行用时: 8ms, 内存消耗: 508K, 提交时间: 2018-12-30 14:25:35
#include <bits/stdc++.h> using namespace std; int main(){ int T; cin>>T; int op,a,b,c,d; while(T--){ cin>>op>>a>>b>>c>>d; int fz = op?a*d+b*c:a*d-b*c; int fm = b*d; int g = __gcd(fz,fm); fz /= g; fm /= g; if(fm<0){ fm = -fm; fz = -fz; } cout<<fz<<"/"<<fm<<endl; } return 0; }
C++(clang++11) 解法, 执行用时: 7ms, 内存消耗: 444K, 提交时间: 2022-04-19 19:43:03
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; for(int i=1;i<=t;i++) { int biao,a,c,b,d,x,y,z; cin>>biao>>a>>b>>c>>d; if(biao==1) x=a*d+b*c,y=b*d; else x=a*d-b*c,y=b*d; z=__gcd(x,y); z=abs(z); x=x/z; y=y/z; printf("%d/%d\n",x,y); } }
Python3(3.5.2) 解法, 执行用时: 26ms, 内存消耗: 3552K, 提交时间: 2018-12-30 14:25:27
import math T = int(input()) for t in range(T): o, a, b, c, d = map(int, input().split()) e = b * d // math.gcd(b, d) a *= e // b c *= e // d f = a + c if o else a - c g = math.gcd(e, f) f //= g e //= g print(str(f) + '/' + str(e))