L1-009. N个数求和
来源:互联网 发布:零基础php好学吗 编辑:程序博客网 时间:2024/06/06 02:10
本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式。
输入格式:
输入第一行给出一个正整数N(<=100)。随后一行按格式“a1/b1 a2/b2 ...”给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。
输出格式:
输出上述数字和的最简形式 —— 即将结果写成“整数部分 分数部分”,其中分数部分写成“分子/分母”,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。
输入样例1:52/5 4/15 1/30 -2/60 8/3输出样例1:
3 1/3输入样例2:
24/3 2/3输出样例2:
2输入样例3:
31/3 -1/6 1/8输出样例3:
7/24
重要的是保证下面这几组数据能通过
3
0/1 0/2 0/3
1
2/10
3
0/1 0/2 5/10
参考代码:
#include<cstdio>#include<cmath>#include<cstdlib>#include<cctype>#include<cstring>#include<string>#include<sstream>#include<algorithm>#include<stack>#include<queue>#include<vector>#include<set>#include<map>#include<iostream>using namespace std;typedef long long ll;const int maxn = 1e2+10;int n;ll zi[maxn],mu[maxn];ll gcd( ll m, ll n){ if( m == 0) return n; return gcd(n%m,m);}ll lcm( ll m, ll n){ return m*n/gcd(m,n);}int main(){ while( ~scanf("%d",&n)) { for( int i = 1; i <= n; i++) scanf("%lld/%lld",&zi[i],&mu[i]); ll a = zi[1],b = mu[1]; for( int i = 2; i <= n; i++) { ll tmp = lcm(b,mu[i]); a = a*(tmp/b); zi[i] = zi[i]*(tmp/mu[i]); a += zi[i]; b = tmp; } if( abs(a) > b) { if( abs(a)%b == 0) printf("%lld\n",a/b); else { ll tmp = gcd(abs(a),b); printf("%lld %lld/%lld\n",abs(a/b),a%b/tmp,b/tmp); } } else { if( a == 0) printf("0\n"); else { ll tmp = gcd(a,b); printf("%lld/%lld\n",a/tmp,b/tmp); } } } return 0;}
0 0
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- L1-009. N个数求和
- 如何使Qt应用程序不在系统的任务栏上显示?
- 对python脚本传参数
- Mword单词记忆小助手
- Linux命令小知识
- 【剑指offer Java】面试题6:重建二叉树
- L1-009. N个数求和
- 笔试题-奇数位丢弃
- web请求响应规范化处理
- java 字节流与字符流的区别
- python的特殊方法__nonzero__
- 欢迎使用CSDN-markdown编辑器
- 读写锁实例
- Oracle 查看表空间的大小及使用情况sql语句和oracle增加表空间大小两种实现方法
- 三天打鱼两天晒网