PAT 1081. Rational Sum (20) GCD
来源:互联网 发布:传奇h5修改数据库教程 编辑:程序博客网 时间:2024/06/14 13:52
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
懒得写了,直接贴别人的了。不过这个算法没考虑负号居然也能过zzzzz
求这些分数的和,并且最后的形势是真分数形式;比如 6/3 =2; 4/8=1/2;10/3=3 1/3;输入的可能是假分数形式,先把假分数的处理成真分数在进行加减,否则会超时;用到辗转相除法求最大公约数 被除数÷除数=商……余数;如果余数是0,那么此时的被除数是最大公约数;否则 被除数=除数;除数=余数,继续int gcd(int b1, int b2){ return b2==0 ? b1 : gcd(b2, b1%b2);}
评测结果
时间 结果 得分 题目 语言 用时(ms) 内存(kB) 用户 8月17日 14:32答案正确201081C++ (g++ 4.7.2)1436datrilla测试点
测试点 结果 用时(ms) 内存(kB) 得分/满分 0答案正确14364/41答案正确14364/42答案正确11804/43答案正确13844/44答案正确13084/4
#include<iostream> using namespace std; int gcd(int b1, int b2){ return b2==0 ? b1 : gcd(b2, b1%b2);}int main(){ int N; long int a1, a2, b1, b2,Gmax; char ctemp; cin >> N ; a1 = 0; b1 = 1; while (N--) { cin >> a2 >> ctemp >> b2; Gmax =gcd(b2, a2); b2 /= Gmax; a2 /= Gmax; Gmax = gcd(b1, b2); b2 /= Gmax; a1 = a1*b2+a2*b1/Gmax; b1 = b1*b2; } if(a1%b1 == 0)cout << a1 / b1 << endl; else { Gmax = gcd(b1, a1); b1 /= Gmax; a1 /= Gmax; if (0 == a1 / b1) { cout << a1 << "/" << b1 << endl; } else { cout << a1 / b1 << " " << a1%b1 << "/" << b1 << endl; } } system("pause"); return 0;}
- PAT 1081. Rational Sum (20) GCD
- PAT 1081. Rational Sum (20)
- PAT 1081. Rational Sum (20)
- PAT 1081. Rational Sum(20)
- 【PAT】1081. Rational Sum (20)
- PAT 1081. Rational Sum (20)
- PAT 1081. Rational Sum (20)
- 【PAT】1081. Rational Sum (20)
- PAT 1081. Rational Sum (20)
- PAT 1081. Rational Sum (20)
- 1081. Rational Sum (20) PAT
- PAT (Advanced Level) 1081. Rational Sum (20) 分数求和,辗转相除法求gcd
- PAT 1081. Rational Sum
- 【PAT】1081. Rational Sum
- PAT--1081. Rational Sum
- PAT A 1081. Rational Sum (20)
- ZJU-PAT 1081. Rational Sum (20)
- PAT (Advanced) 1081. Rational Sum (20)
- (作业)Swift类的属性与方法
- flask email service学习笔记
- 多线程第一章知识点
- HDU_2089_不要62
- TCP 的三次握手
- PAT 1081. Rational Sum (20) GCD
- 详解c++指针的指针和指针的引用-转载
- Hello CSDN
- CS50 2016-Week 0 学习笔记
- BZOJ 2212 [Poi2011]Tree Rotations 线段树合并
- Linux下定时任务crontab实践
- codeforces 851C
- 【CSS】background-clip属性解决background问题。
- 爬虫实战之四--urllib库的使用详解