PAT A1081 Rational Sum (20分)

前言

传送门

正文


参考题解

#include<iostream>
#include<cmath>
using namespace std;
/* 题意: 给定n个有理数(以分数形式表示),计算这n个有理数的和 思路:涉及到分数运算,直接用算法笔记的分数四则运算模板即可。 分数运算设计到三个主要函数,一是求最大公约数,二是化简函数reduction, 三是输出函数showRes(一般输出形式是 整数部分+真分数部分) */
typedef long long LL;
struct Fraction{
	LL up,down;
}; 
//求最大公约数 
LL gcd(LL a,LL b){
	return b==0?a:gcd(b,a%b);
} 
//化简函数 
Fraction reduction(Fraction res){
	if(res.down<0){//分母为负数,则分子分母均为其相反数 
		res.up=-res.up;
		res.down=-res.down;
	}
	if(res.up==0){//分子为0 
		res.down=1;
	}else{//分子不为0,约分 
		LL factor=gcd(abs(res.up),res.down);
		res.up/=factor;
		res.down/=factor; 
	}
	return res; 
}

void showRes(Fraction res){
	res=reduction(res);
	if(res.down==1){//整数 
		printf("%lld\n",res.up);
	}else if(abs(res.up)>res.down){//假分数
		printf("%lld %lld/%lld\n",res.up/res.down,abs(res.up)%res.down,res.down); 
	}else {//真分数 
		printf("%lld/%lld\n",res.up,res.down);
	}
		
}
Fraction add(Fraction a,Fraction b){
	Fraction res;
	res.up=a.up*b.down+a.down*b.up;
	res.down=a.down*b.down;
	return reduction(res);//每次加法后都得对结果进行化简 
} 
int main(){
	int n;
	cin>>n;
	Fraction sum,temp;
	sum.up=0,sum.down=1;
	while(n--){
		scanf("%lld/%lld",&temp.up,&temp.down);
		sum=add(sum,temp); 
	} 
	showRes(sum);
	return 0;
} 
全部评论

相关推荐

搜索部&nbsp;首先说下timeline8.18,投递8.19,约一面8.21,晚上一面call约二面8.22,上午二面下午oc周末等待(8.23,8.24)8.25,offer一年前,我还是懵懵懂懂,高考完的暑假,只会提前学学高数,未来的画像是什么?我或许无法预测。开学后,自学Python,接单,无数个客户的ddl,偷偷摸摸一个人找自习的地方,这一步步竟然为后来的我,搭建工程能力的基础。大一上,我也要感谢我的第一位老板,让我接触到了实习,师兄带着我一步步入门,看他们写的飞书文档。大一下,导师带我参与企业项目,这让我渐渐发现,应该去实践,增长见识,而非局限当下,盯着自己的小新pro。不久后,第一波投递开始,结果当然是约面极少。盯着简历上的文字和ssob,我开始思考,确实很多可以去提升。带着些许不甘心,继续沉淀,慢慢的约面也越来越多,有的时候两天7场,准备完就接着下一个日程。这一次,也许是刚好到位吧,比较match,面试答的流利,关关难关关过,成为度孝子展望未来,依然是重重挑战,果然只有收到offer的那一刻是开心的。愿在百度星海拆解的每一段代码,都能成为丈量宇宙的诗行;此志终赴星河,而今迈步重铸天阶。屏幕前的你们,在无数个向星海奔赴的日夜,一定一定,会在未来化作群星回响的征程——请永远相信此刻埋首耕耘的自己!!!
一天三顿半:???百度提前批发 offer了?不是统一和正式批排序完再发吗我靠
百度求职进展汇总
点赞 评论 收藏
分享
牛客小菜鸡66:boss里面,招人的叫老板,找工作的叫牛人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务