列表

详情


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))

上一题