A1081 Rational Sum (20分)
一、技术总结
- 这题是关于分数四则运算的题目,主要的关键点在于化简函数的编写,以及输出显示函数的编写;
- 化简函数的注意点一个是当分子为0的时候,记得将分母赋值为1,如果分子不为0,那么就使用gcd函数进行化简;在一个就是当分母出现负数的时候,为了输出方便要将分子分母的符号转化;
- 关于输出显示函数,一般是根据题目的具体要求进行编写,但是不外乎,一个数假分数的显示,还有就是如果是整数单独输出分子即可,也就是分母为1,如果是真分式,那么就简单输出即可;
二、参考代码
#include<iostream>
#include<vector>
using namespace std;
struct Fraction{
int num, denom;
};
int gcd(int a, int b){
return !b ? a : gcd(b, a % b);
}
Fraction reduction(Fraction a){
if(a.denom < 0){
a.num = -a.num;
a.denom = -a.denom;
}
if(a.num == 0){
a.denom = 1;
}else{
int d = gcd(abs(a.num), abs(a.denom));
a.num /= d;
a.denom /= d;
}
return a;
}
Fraction add(Fraction f1, Fraction f2){
Fraction c;
c.num = f1.num * f2.denom + f1.denom * f2.num;
c.denom = f1.denom * f2.denom;
return c;
}
void showResult(Fraction r){
Fraction c = reduction(r);
if(c.denom == 1){
printf("%d", c.num);
}else{
if(c.num > c.denom){
printf("%d %d/%d", c.num / c.denom, abs(c.num) % c.denom, c.denom);
}else{
printf("%d/%d", c.num, c.denom);
}
}
}
int main(){
int n;
cin >> n;
Fraction sum, first;
scanf("%d/%d", &sum.num, &sum.denom);
for(int i = 1; i < n; i++){
Fraction ans;
scanf("%d/%d", &ans.num, &ans.denom);
sum = add(sum, ans);
}
showResult(sum);
return 0;
}
作者:睿晞
身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
曾有一个业界大牛说过这样一段话,送给大家:
“华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.