NC14519. 分数运算
描述
输入描述
输入一个正整数T,表示有T组数据,每组数据包括五个整数op,a,b,c,d,其中如果op=1,那么表示a/b+c/d; op=0,表示a/b-c/d。其中 1<=T,op,a,b,c,d<=100。
输出描述
两个分数运算的结果 x/y, 要求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 解法, 执行用时: 2ms, 内存消耗: 284K, 提交时间: 2022-10-26 12:24:39
#include<stdio.h> int main() { int a,b,c,d,j,h,k,n,y; scanf("%d",&y); while(y>0) { scanf("%d%d%d%d%d",&n,&a,&b,&c,&d); j=a*d+b*c;h=b*d; k=a*d-b*c; if(n==1) {for(int i=h;i>0;i--)if(j%i==0&&h%i==0){printf("%d/%d\n",j/i,h/i);break;}} else {for(int i=h;i>0;i--)if(k%i==0&&h%i==0){printf("%d/%d\n",k/i,h/i);break;}} y=y-1; } return 0; }
C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 376K, 提交时间: 2019-11-03 19:11:00
#include<iostream> using namespace std; int T; int gcd(int a,int b) { return b? gcd(b,a%b):a; } int main() { ios::sync_with_stdio(false); cin>>T; while(T--) { int op,a,b,c,d; cin>>op>>a>>b>>c>>d; int y=b/gcd(b,d)*d,x=y/b*a+(op? 1:-1)*y/d*c; if(x<0) { cout<<'-'; x=-x; } cout<<x/gcd(x,y)<<'/'<<y/gcd(x,y)<<endl; } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 368K, 提交时间: 2020-02-14 22:19:34
#include<iostream> using namespace std; int T; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int main() { ios::sync_with_stdio(false); cin>>T; while(T--) { int op,a,b,c,d; cin>>op>>a>>b>>c>>d; int y=b/gcd(b,d)*d,x=y/b*a+(op?1:-1)*y/d*c; if(x<0) { cout<<'-'; x=-x; } cout<<x/gcd(x,y)<<'/'<<y/gcd(x,y)<<endl; } return 0; }
Python3 解法, 执行用时: 35ms, 内存消耗: 4556K, 提交时间: 2022-12-11 10:21:51
def gcd(a,b): if b==0:return a else:return gcd(b,a%b) for i in range(int(input())): op,a,b,c,d=map(int,input().split()) if op==1:x, y = a*d + b*c, b*d else:x, y = a*d - b*c, b*d s = gcd(max(abs(x), y), min(abs(x), y)) print(str(x//s) + '/' + str(y//s))