PAT 1081. Rational Sum (20)
2015-11-23 21:37
591 查看
要化简输入的分子 分母
不然测试点3会错 恐怕是溢出了
不然测试点3会错 恐怕是溢出了
#include<vector> #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<queue> #include<map> #include<stack> using namespace std; #define INF 100000000 #define min(a,b) a<b?a:b void Swap(char *s,char *b) { char t=*s; *s=*b; *b=t; } int gcd(int m,int n) { int t=1; while(t!=0) { t=m%n; m=n; n=t; } return m; } int main() { int n; int t1,t2; int a[101],b[101]; int s1,s2; scanf("%d",&n); s1=s2=1; int t; for(int i=0;i<n;i++) { scanf("%d/%d",&a[i],&b[i]); t=gcd(abs(a[i]),b[i]); if(t!=1) { a[i]/=t; b[i]/=t; } } s1=0; t2=b[0]; s2=b[0]; for(int i=1;i<n;i++) { if(a[i]==0) continue; t2=gcd(b[i],s2); s2=s2/t2*b[i]; } for(int i=0;i<n;i++) { if(a[i]==0) continue; s1+=s2/b[i]*a[i]; } if(s1!=0) { t1=gcd(abs(s1),s2); s1/=t1; s2/=t1; } if(s1==0) printf("0\n"); else if(s2==1) printf("%d\n",s1); else { if(abs(s1)/s2!=0) printf("%d ",abs(s1)/s2); printf("%d/%d\n",s1%s2,s2); } return 0; }
相关文章推荐
- Unity3D游戏引擎最详尽基础教程
- 我的IntellJ Idea学习笔记
- 矩阵转置的一般算法
- mac安装linux虚拟机
- android中Baseadapter的 getItem 和 getItemId 的作用和重写
- Swift学习笔记(三)
- UIViewController
- iOS应用版本更新(自动提醒用户更新代码)
- HashTable和HashMap的区别
- ViewStub的简单介绍
- Linux Bash 编程基础
- 1014. Waiting in Line (30)
- Hibernate整体理解
- 0-1背包问题
- AIDL简单使用
- Synchronized同步的考虑
- html5和html4的区别
- selenium搭建、运行
- UIBarButtonItem、UINavigationController
- 增长黑客:我们不能忽视的力量