1081. Rational Sum (20)
来源:互联网 发布:无证之罪 郭宇 知乎 编辑:程序博客网 时间:2024/04/29 20:41
1081. Rational Sum (20)
Given N rational numbers in the form "numerator/denominator", you are supposed to calculate their sum.
Input Specification:
Each input file contains one test case. Each case starts with a positive integer N (<=100), followed in the next line N rational numbers "a1/b1 a2/b2 ..." where all the numerators and denominators are in the range of "long int". If there is a negative number, then the sign must appear in front of the numerator.
Output Specification:
For each test case, output the sum in the simplest form "integer numerator/denominator" where "integer" is the integer part of the sum, "numerator" < "denominator", and the numerator and the denominator have no common factor. You must output only the fractional part if the integer part is 0.
Sample Input 1:52/5 4/15 1/30 -2/60 8/3Sample Output 1:
3 1/3Sample Input 2:
24/3 2/3Sample Output 2:
2Sample Input 3:
31/3 -1/6 1/8Sample Output 3:
7/24
这道题是简单题,目的是求有理数的加法,并且按照要求输出结果,题目的关键是求两个整数的最大公约数和最小公倍数,代码如下,同时附上链接递归及非递归求最大公约数
#include<iostream>#include <vector>using namespace std;//最大公约数long long gcd( long long x , long long y){long long max,min,temp;max = x > y ? x : y ;min = x < y ? x : y ;while( max % min ){temp = max % min;max = min;min = temp;}return min;}//最小公倍数long long lcm( long long x , long long y ){return x*y/gcd(x,y);}int main(){vector<long long> numerator,denominator,factor;char c;long long a,b,temp,sum = 0;int n;cin>>n;for ( int i = 0; i < n ; i++ ){cin>>a>>c>>b;numerator.push_back(a);denominator.push_back(b);}temp = denominator[0];for ( int i = 1; i < denominator.size() ; i++ ){temp = lcm( temp , denominator[i] );}for ( int i = 0; i < denominator.size() ; i++ ){factor.push_back(temp/denominator[i]);}for ( int i = 0; i < numerator.size() ; i++ ){numerator[i]=numerator[i]*factor[i];sum += numerator[i];}if( sum%temp && sum/temp )cout<<(sum/temp)<<" "<<((sum%temp)/gcd((sum%temp),temp))<<"/"<<(temp/gcd((sum%temp),temp));else if( sum%temp && !(sum/temp) )cout<<((sum%temp)/gcd((sum%temp),temp))<<"/"<<(temp/gcd((sum%temp),temp));elsecout<<(sum/temp);return 0;}
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 第十三周项目6-体验文件操作 2
- Matlab图像处理函数烩(二)
- C++ 对象模型初探
- 【codeforces】487E. Tourists 点双连通+树链剖分
- orcale 中序列的使用和创建
- 1081. Rational Sum (20)
- C#总结
- 将单词转换为它的复数形式
- 【BZOJ】【P2793】【Poi2012】【Vouchers】【题解】【乱搞】
- instanceof和isInstance(Object obj) 和isAssignableFrom(Class cls)的区别和联系
- 第十三周项目6-体验文件操作 3
- shell 脚本 打印指定目录下包含某些字符串的文件
- jQuery 核心函数:jQuery([selector,[context]])最基础的函数
- 第三章课后练习