12:分数求和
2018-06-17 23:13:39来源:未知 阅读 ()
12:分数求和
- 查看
- 提交
- 统计
- 提问
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。
如:5/6、10/3均是最简形式,而3/6需要化简为1/2, 3/1需要化简为3。
分子和分母均不为0,也不为负数。
- 输入
- 第一行是一个整数n,表示分数个数,1 <= n <= 10;
接下来n行,每行一个分数,用"p/q"的形式表示,不含空格,p,q均不超过10。 - 输出
- 输出只有一行,即最终结果的最简形式。若为分数,用"p/q"的形式表示。
- 样例输入
-
2 1/2 1/3
- 样例输出
-
5/6
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 long long int a[1000001]; 7 long long int b[1000001]; 8 long long int anszi=1; 9 long long int ansmu=1; 10 long long int gcd(long long int a,long long int b) 11 { 12 if(a==0)return b; 13 else return gcd(b%a,a); 14 } 15 int main() 16 { 17 long long int n; 18 cin>>n; 19 20 for(int i=1;i<=n;i++) 21 { 22 scanf("%d/%d",&a[i],&b[i]); 23 } 24 if(n==1) 25 { 26 long long int gys=gcd(a[1],b[1]); 27 a[1]=a[1]/gys; 28 b[1]=b[1]/gys; 29 if(b[1]==1) 30 { 31 cout<<a[1]; 32 return 0; 33 } 34 cout<<a[1]<<"/"<<b[1]; 35 return 0; 36 } 37 for(int i=1;i<=n-1;i++) 38 { 39 ansmu=b[i+1]*b[i]; 40 anszi=a[i]*(ansmu/b[i])+a[i+1]*(ansmu/b[i+1]); 41 b[i+1]=ansmu; 42 a[i+1]=anszi; 43 } 44 long long int zi=anszi; 45 long long int mu=ansmu; 46 long long int gys=gcd(zi,mu); 47 anszi=anszi/gys; 48 ansmu=ansmu/gys; 49 if(ansmu==1)cout<<anszi; 50 else 51 { 52 cout<<anszi<<"/"<<ansmu; 53 } 54 return 0; 55 }
这个题的测试数据比较坑爹
1.要考虑的分母为0的情况
2.要考虑的n为1的情况
3.所有数据全开long long否则最后一个点不过
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 暴力+辗转相除法——N个数求和 2020-03-24
- 从“最简真分数的个数”谈起 2019-09-17
- 一些笔记【杂】 2019-08-16
- 递归(二):正整数的拆分 2019-08-16
- Codeup 2018-12-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash